您好,登錄后才能下訂單哦!
本文來(lái)自與自己的博客:www.wangerbao.com
Bulk Write Operations操作是mongodb3.2的新增功能,語(yǔ)法如下:
db.collection.bulkWrite( [ <operation 1>, <operation 2>, ... ], { writeConcern : <document>, ordered : <boolean> } )
其中ordered是個(gè)需要注意的地方,根據(jù)官方描述:
默認(rèn)是ture,也就是按照順序插入數(shù)據(jù),如果中間出現(xiàn)錯(cuò)誤則不會(huì)在繼續(xù)執(zhí)行
如果是false,則mongo會(huì)采用并發(fā)的方式插入數(shù)據(jù),中間出現(xiàn)錯(cuò)誤對(duì)后續(xù)操作無(wú)影響
事例如下
初始化數(shù)據(jù),初始化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默認(rèn):true,第二條數(shù)據(jù)主鍵沖突,則只會(huì)插入第一條數(shù)據(jù),數(shù)據(jù)總量為4
第二條數(shù)據(jù)主鍵沖突,則只會(huì)插入一條數(shù)據(jù) > 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,第一條數(shù)據(jù)主鍵沖突,2、3條沒(méi)問(wèn)題,則數(shù)據(jù)總量為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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。