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的数据被替换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值