복붙노트

[MONGODB] 어떻게 특정 값에 MongoDB의 문서에있는 모든 배열 요소를 변경하려면? [복제]

MONGODB

어떻게 특정 값에 MongoDB의 문서에있는 모든 배열 요소를 변경하려면? [복제]

나는 다음과 같은 문서가 있다고 가정

{
   _id: ObjectId("5234cc89687ea597eabee675"),
   code: "xyz",
   tags: [ "school", "book", "bag", "headphone", "appliance" ],
   qty: [
          { size: "S", num: 10, color: "blue" },
          { size: "M", num: 45, color: "blue" },
          { size: "L", num: 100, color: "green" }
        ]
}

{
   _id: ObjectId("5234cc8a687ea597eabee676"),
   code: "abc",
   tags: [ "appliance", "school", "book" ],
   qty: [
          { size: "6", num: 100, color: "green" },
          { size: "6", num: 50, color: "blue" },
          { size: "8", num: 100, color: "brown" }
        ]
}

{
   _id: ObjectId("5234ccb7687ea597eabee677"),
   code: "efg",
   tags: [ "school", "book" ],
   qty: [
          { size: "S", num: 10, color: "blue" },
          { size: "M", num: 100, color: "blue" },
          { size: "L", num: 100, color: "green" }
        ]
}

나는 그렇게 어떻게 0으로 코드 "EFG"를 갖는 문서의 요소 모두의 납입을 변경하려면? 나는 위치 연산자 루프를 사용해야합니까?

해결법

  1. ==============================

    1.이 작업을 수행하는 가장 좋은 방법은 배열 요소를 일치 대량 () API를 사용하여 위치 $ 연산자를 개별적으로 업데이트 할 수 있습니다. 당신은 정말 당신의 수량 배열을 날려 안된다.

    이 작업을 수행하는 가장 좋은 방법은 배열 요소를 일치 대량 () API를 사용하여 위치 $ 연산자를 개별적으로 업데이트 할 수 있습니다. 당신은 정말 당신의 수량 배열을 날려 안된다.

    var bulk = db.mycollection.initializeOrderedBulkOp(),   
        count = 0;
    
    db.mycollection.find({ "code" : "efg" }).forEach(function(doc){ 
        var qty = doc["qty"]; 
        for (var idx = 0; idx < qty.length; idx++){ 
            bulk.find({ 
                "_id": doc._id, 
                "qty": { "$elemMatch": { "num": qty[idx]["num"]}}
            }).update({ "$set": { "qty.$.num": 0 }})
        }     
        count++;  
        if (count % 200 == 0) { 
            // Execute per 200 operations and re-init.
            bulk.execute(); 
            bulk = db.mycollection.initializeOrderedBulkOp(); 
        } 
    })
    
    // Clean up queues
    if (count % 200 != 0)
        bulk.execute(); 
    
  2. from https://stackoverflow.com/questions/32610663/how-to-change-all-the-array-elements-in-a-mongodb-document-to-a-certain-value by cc-by-sa and MIT license