Computer >> Máy Tính >  >> Lập trình >> MongoDB

Thực hiện nhiều cập nhật với các hoạt động hàng loạt và cập nhật các phần tử trong một mảng trong MongoDB


Đối với điều này, hãy sử dụng initializeOrderedBulkOp (). Nó khởi tạo và trả về một trình tạo hoạt động Bulk () mới cho một tập hợp. Trình tạo xây dựng một danh sách có thứ tự các hoạt động ghi mà MongoDB thực thi hàng loạt.

Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

>db.demo550.insertOne({"Name":"Chris","details":[{"Marks":49,Result:"fail"},{"Marks":58,Result:"fail"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8e35bd9e5f92834d7f05e4")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo550.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "fail" }, { "Marks" : 58, "Result" : "fail" } ] }

Sau đây là truy vấn để cập nhật các phần tử trong một mảng trong MongoDB và thực hiện các hoạt động hàng loạt -

> 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();
... });

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo550.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [ { "Marks" : 49, "Result" : "PASS" }, { "Marks" : 58, "Result" : "PASS" } ] }