Mongodb的Bulk Write 操作
admin
2023-01-26 05:00:09
0

本文来自与自己的博客:www.wangerbao.com

Bulk Write Operations操作是mongodb3.2的新增功能,语法如下:

db.collection.bulkWrite(
   [ , ... ],
   {
      writeConcern : ,
      ordered : 
   }
)

其中ordered是个需要注意的地方,根据官方描述:

  1. 默认是ture,也就是按照顺序插入数据,如果中间出现错误则不会在继续执行

  2. 如果是false,则mongo会采用并发的方式插入数据,中间出现错误对后续操作无影响

事例如下

  • 初始化数据,初始化3条

  • > db.log.count();
    0
    > db.log.bulkWrite( [
    ...     { insertOne : { "document" : {"_id" : 1, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 2, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 3, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }
    ...     ],{ordered:true});
    {
            "acknowledged" : true,
            "deletedCount" : 0,
            "insertedCount" : 3,
            "matchedCount" : 0,
            "upsertedCount" : 0,
            "insertedIds" : {
                    "0" : 1,
                    "1" : 2,
                    "2" : 3
            },
            "upsertedIds" : {
    
            }
    }
    > db.log.count();
    3
  • order默认:true,第二条数据主键冲突,则只会插入第一条数据,数据总量为4

  • 第二条数据主键冲突,则只会插入一条数据
    > db.log.bulkWrite( [
    ...     { insertOne : { "document" : {"_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 2, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 5, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }
    ...     ],{ordered:true});
    2017-04-10T17:48:37.960+0800 E QUERY    [thread1] BulkWriteError: write error at item 1 in bulk operation :
    BulkWriteError({
            "writeErrors" : [
                    {
                            "index" : 1,
                            "code" : 11000,
                            "errmsg" : "E11000 duplicate key error collection: c_log.log index: _id_ dup key: { : 2.0 }",
                            "op" : {
                                    "_id" : 2,
                                    "char" : "Dithras",
                                    "class" : "barbarian",
                                    "lvl" : 4
                            }
                    }
            ],
            "writeConcernErrors" : [ ],
            "nInserted" : 1,
            "nUpserted" : 0,
            "nMatched" : 0,
            "nModified" : 0,
            "nRemoved" : 0,
            "upserted" : [ ]
    })
    BulkWriteError@src/mongo/shell/bulk_api.js:372:48
    BulkWriteResult/this.toError@src/mongo/shell/bulk_api.js:336:24
    Bulk/this.execute@src/mongo/shell/bulk_api.js:1173:1
    DBCollection.prototype.bulkWrite@src/mongo/shell/crud_api.js:191:20
    @(shell):1:1
    > db.log.count();
    4
  • order修改为false,第一条数据主键冲突,2、3条没问题,则数据总量为6

  • > db.log.bulkWrite( [
    ...     { insertOne : { "document" : {"_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 6, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } },
    ...     { insertOne : { "document" : {"_id" : 5, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }
    ...     ],{ordered:false});
    2017-04-10T17:49:36.539+0800 E QUERY    [thread1] BulkWriteError: write error at item 0 in bulk operation :
    BulkWriteError({
            "writeErrors" : [
                    {
                            "index" : 0,
                            "code" : 11000,
                            "errmsg" : "E11000 duplicate key error collection: c_log.log index: _id_ dup key: { : 4.0 }",
                            "op" : {
                                    "_id" : 4,
                                    "char" : "Dithras",
                                    "class" : "barbarian",
                                    "lvl" : 4
                            }
                    }
            ],
            "writeConcernErrors" : [ ],
            "nInserted" : 2,
            "nUpserted" : 0,
            "nMatched" : 0,
            "nModified" : 0,
            "nRemoved" : 0,
            "upserted" : [ ]
    })
    BulkWriteError@src/mongo/shell/bulk_api.js:372:48
    BulkWriteResult/this.toError@src/mongo/shell/bulk_api.js:336:24
    Bulk/this.execute@src/mongo/shell/bulk_api.js:1173:1
    DBCollection.prototype.bulkWrite@src/mongo/shell/crud_api.js:191:20
    @(shell):1:1
    > db.log.count();
    6


相关内容

热门资讯

今日重大通报“乐驿茶坊.是不是... 网上科普关于“乐驿茶坊有没有挂”话题很是火热,小编也是针对乐驿茶坊作*弊开挂的方法以及开挂对应的知识...
【今日要闻】“玄龙炸金花.可以... 您好:玄龙炸金花这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游...
我来教教您“飞鹰互娱.有挂吗?... 您好:飞鹰互娱这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
【今日要闻】“全民如意麻将.辅... 【今日要闻】“全民如意麻将.辅助开挂神器?”其实是有挂您好,全民如意麻将这个游戏其实有挂的,确实是有...
最新引进“微乐三打一.开挂神器... 家人们!今天小编来为大家解答微乐三打一透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买...
今日重磅消息“微乐龙江麻将.是... 家人们!今天小编来为大家解答微乐龙江麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
【第一财经】“新海贝之城拼三张... 【第一财经】“新海贝之城拼三张.到底是不是挂?”透视曝光猫腻您好,新海贝之城拼三张这个游戏其实有挂的...
我来教教您“西域棋牌.可以开挂... 网上科普关于“西域棋牌有没有挂”话题很是火热,小编也是针对西域棋牌作*弊开挂的方法以及开挂对应的知识...
【第一消息】“兴动棋牌麻将.有... 家人们!今天小编来为大家解答兴动棋牌麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
重磅消息“潮汕掌上娱.辅助器?... 重磅消息“潮汕掌上娱.辅助器?”透视曝光猫腻您好,潮汕掌上娱这个游戏其实有挂的,确实是有挂的,需要了...