首页 > mongodb > basic > 19.MongoDB块写入操作

19.MongoDB块写入操作

1 mongodb块写入简介

MonogoDB提供了像一个集合中进行块写入的操作.

MongoDB3.2新特性

db.collection.bulkWrite()方法提供了插入, 更新, 删除操作. 也可以通过db.collection.insertMany()方法执行块插入.

2 mongodb有序和无序操作

MongoDB操作可以是有序的也可以是无序的.

执行有序操作时, MongoDB顺序执行操作. 如果发生了错误, MongoDB将返回, 并且不执行剩下的操作. ordered Bulk Write

执行无序操作时, MongoDB并行执行操作. 如果发生了错误, MongoDB将继续执行其他的操作. Unordered Bulk Write

有序操作比无序操作执行慢, 因为有序操作需要等待前一个操作执行完毕后再执行.

默认bulkWrite()方法执行顺序操作. 采用无序执行, 在选项文档数据中设置ordered : false. Execution of Operations

3 mongodb bulkWrite()方法

bulkWrite()方法支持以下数据操作:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

每个操作作为一个文档传入一个数组中.

bulkWrite()执行多次操作

try {
   db.characters.bulkWrite(
      [
         { insertOne :
            {
               "document" :
               {
                  "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
               }
            }
         },
         { insertOne :
            {
               "document" :
               {
                  "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3
               }
            }
         },
         { updateOne :
            {
               "filter" : { "char" : "Eldon" },
               "update" : { $set : { "status" : "Critical Injury" } }
            }
         },
         { deleteOne :
            { "filter" : { "char" : "Brisbane"} }
         },
         { replaceOne :
            {
               "filter" : { "char" : "Meldane" },
               "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
            }
         }
      ]
   );
}
catch (e) {
   print(e);
}

返回结果

{
   "acknowledged" : true,
   "deletedCount" : 1,
   "insertedCount" : 2,
   "matchedCount" : 2,
   "upsertedCount" : 0,
   "insertedIds" : {
      "0" : 4,
      "1" : 5
   },
   "upsertedIds" : {

   }
}

其他块写入例子bulkWrite() Examples

4 mongodb分片集合块写入策略

这个部分暂时不写.日后补充.感兴趣的同学可以去看英文原文.

5 参考文章

https://docs.mongodb.com/manual/core/bulk-write-operations/

6 相关文章

MongoDB中文文档

转载请保留原文链接.