mongoDB 方法 -- 插入文档 insert

特别说明: mongoDB 中的document类型,是二进制的json对象(bson)

1、db.collection.insert()

1.1 作用:

将一个或多个文档插入集合中。如果该集合不存在,则该 insert()方法将创建该集合。

1.2 语法:

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

1.3 参数说明:

参数 类型 描述
document 文档或文档数组 要插入集合的文档或文档数组。
writeConcern 文档 可选,MongoDB写入安全机制,如果在事务中运行,请不要为操作明确设置writeConcern
ordered 布尔值 可选,如果为true,按在数组顺序插入文档。如果其中一个文档发生错误,则结束插入且不处理其余文档。 如果为false,执行无序插入。如果其中一个文档发生错误,将继续处理数组中的其余文档。默认为true。

1.4 行为表现

如果写入的文档未指定_id字段,则在插入之前创建_id字段,并赋值唯一的ObjectId()类型的值。如果文档包含一个_id字段,则该_id值在集合中必须唯一,以避免重复的键错误

1.5 例子

db.products.insert( { item: "card", qty: 15 } )
#{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }

db.products.insert( { _id: 10, item: "box", qty: 20 } )
#{ "_id" : 10, "item" : "box", "qty" : 20 }

db.products.insert(
   [
     { _id: 11, item: "pencil", qty: 50, type: "no.2" },
     { item: "pen", qty: 20 },
     { item: "eraser", qty: 25 }
   ]
)
#{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
#{ "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 }
#{ "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }

db.products.insert(
   [
     { _id: 20, item: "lamp", qty: 50, type: "desk" },
     { _id: 21, item: "lamp", qty: 20, type: "floor" },
     { _id: 22, item: "bulk", qty: 100 }
   ],
   { ordered: false }
)

2、db.collection.insertOne()

2.1 作用:

将一个文档插入集合中,如果该集合不存在,则该 insertOne()方法将创建该集合

2.2 语法:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

2.3 参数说明参考 insert()方法

2.4 行为表现

insertOne()与不兼容 db.collection.explain(),使用insert()代替
_id字段的创建与 insert() 方法相同

2.5 例子

db.products.insertOne( { item: "card", qty: 15 } );

db.products.insertOne( { _id: 10, item: "box", qty: 20 } );

3、db.collection.insertMany()

3.1 作用:

将多个或多个文档插入集合中。如果该集合不存在,则该 insert()方法将创建该集合。

3.2 语法:

db.collection.insert(
   [ <document 1> , <document 2>, ... ],
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

3.3 参数说明,参考 insert() 方法

3.4 行为表现

  每个组中的操作数不能超过maxWriteBatchSize数据库的值。从MongoDB 3.6开始,此值为100,000。该值显示在该isMaster.maxWriteBatchSize字段中。
  insertOne()与不兼容 db.collection.explain(),使用insert()代替
  _id字段的创建与 insert() 方法相同

3.5 例子

   db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] );

4、 db.collection.save() 已弃用

4.1 作用:
根据其参数更新现有文档或插入新文档。

4.2 语法:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

4.3 参数说明 参考 insert() 方法

4.4 行为表现

 如果文档不包含_id字段,插入文档, save()方法调用的 insert()方法。在操作过程中, 将创建一个ObjectId()并将其分配给该_id字段。
 如果文档包含_id字段,更新文档,等效于基于_id字段查询,调用update()方法时将upsert选项设置为true。目标文档会被完全替换更新(全量更新)
 从MongoDB 4.2开始,save()方法不能用于没有被_id分片的分片集合

4.5 例子

db.products.save( { item: "book", qty: 40 } )
#{ "_id" : ObjectId("50691737d386d8fadbd6b01d"), "item" : "book", "qty" : 40 }

db.products.save( { _id: 100, item: "water", qty: 30 } )
#{ "_id" : 100, "item" : "water", "qty" : 30 }

# 会完全替换更新
db.products.save( { _id : 100, item : "juice" } )
#{ "_id" : 100, "item" : "juice" }

官网详情:https://docs.mongodb.com/manual/reference/insert-methods/
https://docs.mongodb.com/manual/reference/method/db.collection.save/

posted @ 2021-04-07 21:39  zhanglw  阅读(466)  评论(0)    收藏  举报