在 MongoDB 中使用批次操作執行多次更新並更新陣列中的元素
為此,使用 initializeOrderedBulkOp()。它初始化並返回一個新的 Bulk() 操作生成器以用於一個集合。該生成器構建了一個有序的寫操作列表,由 MongoDB 批次執行。
讓我們建立一個包含文件的集合 −
>db.demo550.insertOne({"Name":"Chris","details":[{"Marks":49,Result:"fail"},{"Marks":58,Result:"fail"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8e35bd9e5f92834d7f05e4")
}使用 find() 方法顯示一個集合中的所有文件 −
> db.demo550.find();
這將生成以下輸出 −
{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "fail" }, { "Marks" : 58, "Result" : "fail" } ] }以下是用於在 MongoDB 中更新陣列中的元素並執行批次操作的查詢 −
> var all= db.demo550.initializeOrderedBulkOp(),
... itr = 0;
> db.demo550.find({ "Name": "Chris", "details.Result": "fail" }).forEach(function(doc) {
... doc.details.filter(function(d){ return d.Result = "fail" }).forEach(function(d) {
... all.find({ "_id": doc._id, "details.Result": "fail" }).updateOne({
... "$set": { "details.$.Result": "PASS" }
... });
... itr++;
... if ( itr % 10== 0 ) {
... all.execute();
... all = db.demo550.initializeOrderedBulkOp();
... }
... });
... if ( itr % 10 != 0 )
... all.execute();
... });使用 find() 方法顯示一個集合中的所有文件 −
> db.demo550.find();
這將生成以下輸出 −
{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "PASS" }, { "Marks" : 58, "Result" : "PASS" } ] }
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP