Mongodb的BulkWrite操作-创新互联

本文来自与自己的博客: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

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:Mongodb的BulkWrite操作-创新互联
本文链接:http://pwwzsj.com/article/csphjd.html