복붙노트

[MONGODB] MongoDB를 어떻게 하나의 명령으로 여러 문서를 업데이트?

MONGODB

MongoDB를 어떻게 하나의 명령으로 여러 문서를 업데이트?

나는 다음 예제 코드는 하나의 문서를 갱신 것을 찾을 수 놀랐습니다 :

> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});

> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});

> db.test.find({"test":"success!"}).count();
1

나는 루프를 통해 할 수 있으며 모든 변경 전까지 업데이트를 유지 알고,하지만 그건 정말 비효율적 인 것 같다. 더 좋은 방법이 있나요?

해결법

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

    1.멀티 업데이트는 그래서 개발 버전 (1.1.3)에서만 가능하며, 최근에 추가되었다. 쉘에서 당신은 세 번째 인수가 upsert 인수입니다 업데이트 할 수있는 네 번째 인수 ()로 true를 건네 멀티 업데이 트를 수행합니다

    멀티 업데이트는 그래서 개발 버전 (1.1.3)에서만 가능하며, 최근에 추가되었다. 쉘에서 당신은 세 번째 인수가 upsert 인수입니다 업데이트 할 수있는 네 번째 인수 ()로 true를 건네 멀티 업데이 트를 수행합니다

    db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
    

    MongoDB를의 버전 2.2 한 번에 여러 문서를 업데이트 할 멀티 true로 설정 옵션에 필요합니다.

    db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
    

    MongoDB를의 버전 3.2 이상 당신은 또한 별도의 멀티 옵션 필요없이 한 번에 여러 문서를 업데이트하는 새로운 방법 updateMany ()를 사용할 수 있습니다.

    db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
    
  2. ==============================

    2.당신은 updateMany을 사용할 수 있습니다 V3.3부터

    당신은 updateMany을 사용할 수 있습니다 V3.3부터

    db.collection.updateMany(
       <filter>,
       <update>,
       {
         upsert: <boolean>,
         writeConcern: <document>,
         collation: <document>,
         arrayFilters: [ <filterdocument1>, ... ]
       }
    )
    

    버전 2.2에서 업데이트 기능은 다음의 형식을 취합니다 :

     db.collection.update(
       <query>,
       <update>,
       { upsert: <boolean>, multi: <boolean> }
    )
    

    https://docs.mongodb.com/manual/reference/method/db.collection.update/

  3. ==============================

    3.몽고 버전> 2.2를 들어, 필드 멀티를 추가하고 true로 설정

    몽고 버전> 2.2를 들어, 필드 멀티를 추가하고 true로 설정

    db.Collection.update({query}, 
                     {$set: {field1: "f1", field2: "f2"}},
                     {multi: true })
    
  4. ==============================

    4.나는 더 나은 인터페이스를 사용하여이 작업을 수행 할 수있는 방법을 만들었습니다.

    나는 더 나은 인터페이스를 사용하여이 작업을 수행 할 수있는 방법을 만들었습니다.

    또한 사전에 그들을 체인에 의해 정렬 업데이트 및 제거합니다에, 건너 뛰기, 제한을 적용 할 수 있습니다.

    당신이 관심이 있다면, 몽고 - 해커 체크 아웃

  5. ==============================

    5.MongoDB를 클라이언트에서 입력 :

    MongoDB를 클라이언트에서 입력 :

    db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
    

    3.2 버전의 새로운 기능

    PARAMS ::

    {}:  select all records updated
    

    키워드 인수 다중 촬영하지

  6. ==============================

    6.MongoDB를 사용하면 무시 얻을 것이다 기준과 일치 이상의 문서가있는 경우에도, 문서를 업데이 트하는 일이 첫 번째 일치 중 업데이트 명령을 발행 할 때 쿼리 기준과 일치 하나의 일치하는 문서를 찾을 수 있습니다.

    MongoDB를 사용하면 무시 얻을 것이다 기준과 일치 이상의 문서가있는 경우에도, 문서를 업데이 트하는 일이 첫 번째 일치 중 업데이트 명령을 발행 할 때 쿼리 기준과 일치 하나의 일치하는 문서를 찾을 수 있습니다.

    그래서 이것은 우리가 쿼리 기준과 일치하는 모든 documnets 업데이 트를 의미하여 업데이트 문에 "MULTI"옵션을 지정할 수 있습니다 극복합니다. 컬렉션 기준 및 업데이트 일치하는 사람을 찾는 모든 documnets를 검색 :

    db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
    
  7. ==============================

    7.저도 같은 문제가 있었는데, 나는 해결책을 발견하고 그것이 마치 마법처럼 작동합니다

    저도 같은 문제가 있었는데, 나는 해결책을 발견하고 그것이 마치 마법처럼 작동합니다

    다만이 같은 사실에 플래그 멀티를 설정합니다 :

     db.Collection.update(
                    {_id_receiver: id_receiver},
                   {$set: {is_showed: true}},
                    {multi: true}   /* --> multiple update */
                , function (err, updated) {...});
    

    난이 도움이 되었으면 좋겠 :)

  8. ==============================

    8.당신은 use.` 수 있습니다

    당신은 use.` 수 있습니다

            Model.update({
                'type': "newuser"
            }, {
                $set: {
                    email: "abc@gmail.com",
                    phoneNumber:"0123456789"
                }
            }, {
                multi: true
            },
            function(err, result) {
                console.log(result);
                console.log(err);
            })  `
    
  9. ==============================

    9.MongoDB의의 updateMany의 모든 최신 버전은 () 잘 작동됩니다

    MongoDB의의 updateMany의 모든 최신 버전은 () 잘 작동됩니다

    db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});
    
  10. ==============================

    10., 덕분에이 공유를위한, 나는 2.6.7 사용 및 다음 쿼리는 단지 일

    , 덕분에이 공유를위한, 나는 2.6.7 사용 및 다음 쿼리는 단지 일

    모든 문서에 대한 :

    db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})
    

    하나의 문서에 대한 :

    db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})
    
  11. from https://stackoverflow.com/questions/1740023/mongodb-how-to-update-multiple-documents-with-a-single-command by cc-by-sa and MIT license