Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

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