복붙노트

[MONGODB] MongoDB의 배열에서의 여러 요소를 업데이트 [중복]

MONGODB

MongoDB의 배열에서의 여러 요소를 업데이트 [중복]

나는 MongoDB를 내 주식 모음에 다음과 같은 문서가 있습니다.

{ _id: 'xRMuRBhqRLgASyQyW',
  History: 
     [ { orderId: '12032017001877',
         status: 'COMPLETED',
        },
       { orderId: '22122017002450', 
        status: 'PROCESSED',
        },
        { orderId: '22122018002450', 
        status: 'DEPOSIT',
        }  
     ] 
 }

나는 주식 컬렉션에서 모든 문서를 반복 원하는 필드 플래그를 추가 : 사실 상태가 '처리 되었음'가 아닌 경우.

해결법

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

    1.당신은 스크립트를 사용하여 얻을 수 있습니다.

    당신은 스크립트를 사용하여 얻을 수 있습니다.

    db.stocks.find().forEach(function(e){var modified=false;e.History.forEach(function(o){if(o.status!="PROCESSED"){o.flag=true;modified=true}});if(modified){db.stocks.save(e)}});
    
  2. ==============================

    2.당신은 배열의 각 요소를 업데이트 할 모든 $ [] 위치 연산자를 사용합니다

    당신은 배열의 각 요소를 업데이트 할 모든 $ [] 위치 연산자를 사용합니다

    db.collection.update(
       { "History": { "$elemMatch": { "status": { "$ne": "PROCESSED" } } } }, 
       { "$set": { "History.$[].flag": false } },
       { "multi": true }
    )
    
  3. ==============================

    3.당신은 단순히 연산자를 '$'를 사용하여 작업을 수행 할 수 있습니다. 뭔가 같은 :

    당신은 단순히 연산자를 '$'를 사용하여 작업을 수행 할 수 있습니다. 뭔가 같은 :

     db.stocks.update( {"history.status" : { $not: "PROCESSED" } , 
                    { $set: {"history.$.flag": true }} , 
                    false , 
                    true);
    
  4. ==============================

    4.내 대답은 @Anthony 매우 유사하지만, (upsert 멀티 용) 개의 추가 파라미터가 추가된다. 참고로 당신은 공식 문서를 확인할 수 있습니다.

    내 대답은 @Anthony 매우 유사하지만, (upsert 멀티 용) 개의 추가 파라미터가 추가된다. 참고로 당신은 공식 문서를 확인할 수 있습니다.

    db.stocks.update(
        { "History": { "$elemMatch": { "status": { "$ne": "PROCESSED" } } } }, 
        { "$set": { "History.$[].flag": false }},
         false,              // show that if there is not any document with specified criteria , it will not create a new document.
         ture              // according to document of mongodb if multi is true then more than one document will be updated, other wise only one document will be updated.
    )
    
  5. from https://stackoverflow.com/questions/51206841/update-multiple-elements-in-an-array-in-mongodb by cc-by-sa and MIT license