MongoDB 提供了以下用于将document插入到集合中的方法
Methods | explain |
---|---|
db.collection.insertOne() | 将单个文档插入集合中。 |
db.collection.insertMany() | 将多个文档插入集合中。 |
db.collection.insert() | 将一个或多个文档插入到集合中。 |
db.collection.save(). | 保存新文档而不指定_id 字段,保存指定_id 字段的新文档,替换现有文档 |
ObjectId
在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的_id字段,该字段充当primary key。如果插入的文档省略_id字段,则 MongoDB 驱动程序会自动为_id字段生成ObjectId(由“时间戳” 、“机器名”、“PID号”和“计数器”组成)。
-
时间戳(4个字节。从标准纪元开始,单位为秒)
时间戳,与随后的5个字节(机器名+PID)组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着Objectld大致会按照插入的顺序排列,这对于某些方面很有用,如将其作为索引提高效率,但是这个是没有保证的。这4个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从Objectld获取这个信息。
-
机器名(3个字节)
所在主机的唯一标识符。通常是机器主机名的散列值,机器名通过Md5加密后取前三个字节。
-
PID(2个字节)
为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,所以加上进程标识符(PID).注意到每次重启mongod进程后PID号通常会发生变化就可以了。前9字节保证了同一秒钟不同机器不同进程产生的Objectld是唯一的。
-
计数器(3个字节)
表示的取值范围就是 256256256 = 16777216。一个自动增加的计数器,确保相同进程同一秒产生的 Objectld 也是不一样的同一秒钟最多允许每个进程拥有2563 (16 777 216) 不同的 Objectld。
insertOne
db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
insertMany
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
insert
db.products.insert( { item: "card", qty: 15 } ) //插入单个
db.products.insert( //插入多个
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
)
save
db.products.save( { item: "book", qty: 40 } ) //保存新文档而不指定_id 字段
db.products.save( { _id: 100, item: "water", qty: 30 } )//保存指定_id 字段的新文档
products集合包含以下文档:
{ "_id" : 100, "item" : "water", "qty" : 30 }
db.products.save( { _id : 100, item : "juice" } ) //替换现有文档