MongoDB 批量写操作

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

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

        db.collection.bulkWrite([ , , ... ], 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的数据被替换

你可能感兴趣的:(MongoDB,mongodb,数据库,nosql)