在 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" } ] }

更新于: 2020 年 5 月 14 日

265 次浏览

开启您的职业生涯

完成课程即可获得认证

开始学习
广告