Sử dụng initializeOrderedBulkOp() để khởi tạo builder thao tác bulk có thứ tự. Builder xây dựng danh sách có thứ tự các thao tác ghi mà MongoDB thực thi hàng loạt.
Tạo collection:
>db.demo550.insertOne({"Name":"Chris","details":[{"Marks":49,Result:"fail"},{"Marks":58,Result:"fail"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e35bd9e5f92834d7f05e4") }
Hiển thị tài liệu (cả hai Result đều "fail"):
> db.demo550.find();
Script bulk update: duyệt các tài liệu Name="Chris" và details.Result="fail", cập nhật từng phần tử fail thành "PASS", thực thi theo batch 10 operations:
> 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();
... });
Kiểm tra lại:
> db.demo550.find();
Kết quả (cả hai Result đều "PASS"):
{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "PASS" }, { "Marks" : 58, "Result" : "PASS" } ] }