इसके लिए initializeOrderedBulkOp() का उपयोग करें। यह collection के लिए new Bulk() operations builder initialize और return करता है। Builder write operations की ordered list construct करता है जो MongoDB bulk में execute करता है।
Collection बनाना
>db.demo550.insertOne({"Name":"Chris","details":[{"Marks":49,Result:"fail"},{"Marks":58,Result:"fail"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e35bd9e5f92834d7f05e4") }
सभी Documents Display करना
> db.demo550.find();
Output:
{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "fail" }, { "Marks" : 58, "Result" : "fail" } ] }
Bulk Operations से Array Elements Update Query
> 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();
... });
Updated Documents Display करना
> db.demo550.find();
Output:
{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "PASS" }, { "Marks" : 58, "Result" : "PASS" } ] }
व्याख्या: Bulk operations multiple updates को efficiently batch में execute करते हैं। details.$.Result में $ positional operator matching array element को update करता है। हर 10 operations पर execute() called होता है।