> 文章列表 > MongoDB 批量写操作

MongoDB 批量写操作

MongoDB 批量写操作

我们已经介绍过MongoDB中文档的增删改查等操作,但在有一些场景下,我们想同时完成插入、删除、更新等操作,显然是没有办法实现的。但是MongoDB给我们提供了这样的方式,可以使用db.collection.bulkWrite()方法实现批量插入、更新和删除操作。

下面我们来了解一下批量写操作的语法:

        db.collection.bulkWrite([ <operation 1>, <operation 2>, ... ], options)

其中,

collection:指的是集合名称

operation:指的是操作,目前支持的操作有:insertOne, updateOne, updateMany, replaceOne, deleteOne, deleteMany。

options:选填,指的是其他一些选项。

        ordered 选项: 默认为true:批量操作中某个操作执行失败,后面的操作将不再执行。

                false:批量操作中某个操作执行失败,后面的操作仍然执行。

【注意】ordered并不能保证事务完整性,批量操作并不能保证事务完整性。

示例:

我们准备一下初始化文档:

db.test.insertMany([{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] },{ "_id" : "1002", "name" : "李四", "fruits" : [ "banana", "apple" ] },{ "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ] }]
);

下面我们插入两条数据,更新一条数据,删除一条数据,替换一条数据:

db.test.bulkWrite([{ insertOne: { document: { "_id" : "1004", "name" : "1004", "fruits" : [ "apple" ],"add_comment" : "我是新增加的"}}},{   insertOne: { document: { "_id" : "1005", "name" : "1005", "fruits" : [ "orange" ],"add_comment" : "我是新增加的"}},},{updateMany: {filter: { "fruits": "apple" },update: { $set: { "update_comment": "I has apple" } }}},{deleteOne: {filter: { "name": "张三"}}},{replaceOne: {filter: { "name": "李四" },replacement: { "replace_commet": "我被替换掉了" }}}
], { ordered: false })

执行完成后,查询文档:

{ "_id" : "1002", "replace_commet" : "我被替换掉了" }
{ "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ], "update_comment" : "I has apple" }
{ "_id" : "1004", "name" : "1004", "fruits" : [ "apple" ], "add_comment" : "我是新增加的", "update_comment" : "I has apple" }
{ "_id" : "1005", "name" : "1005", "fruits" : [ "orange" ], "add_comment" : "我是新增加的" }

(1)编号为1004,1005的插入到了文档中

(2)编号为1003,1004的文档被更新了,说明批量写入操作时新插入的数据只要满足后面的操作也会被执行

(3)编号为1001的数据被删除

(4)编号为1002的数据被替换