MongoDB : 단일 명령으로 여러 문서를 업데이트하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1740023

  •  20-09-2019
  •  | 
  •  

문제

다음 예제 코드는 단일 문서 만 업데이트한다는 사실에 놀랐습니다.

> 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.3). 쉘에서 당신은 통과하여 멀티 업데이트를합니다. true 네 번째 논쟁으로 update(), 여기서 세 번째 인수는 상향 인수입니다.

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() 별도의 필요없이 한 번에 여러 문서를 업데이트하려면 multi 옵션.

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

다른 팁

업데이트 v2.2에서 업데이트 기능은 다음과 같은 양식을 취합니다.

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

선택된 답변은 더 이상 적용되지 않습니다.

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

을 위한 몽고 버전> 2.2, 필드 멀티를 추가하고 그것을 true로 설정하십시오.

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

더 나은 인터페이스 로이 작업을 수행하는 방법을 만들었습니다.

  • db.collection.find({ ... }).update({ ... }) - 멀티 업데이트
  • db.collection.find({ ... }).replace({ ... }) - 단일 교체
  • db.collection.find({ ... }).upsert({ ... }) - 단일 Upsert
  • db.collection.find({ ... }).remove() - 멀티 제거

또한 한계를 적용하고 건너 뛰고 업데이트에 정렬하고 사전에 체인하여 제거 할 수 있습니다.

관심이 있으시면 확인하십시오 몽고 사커

MongoDB 클라이언트에서 다음을 입력합니다.

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

버전 3.2의 새로운 새로운

매개 변수 ::

{}:  select all records updated

키워드 인수 multi 취할수없는

MongoDB는 업데이트 명령을 발행 할 때 쿼리 기준과 일치하는 일치하는 문서 하나만 찾을 수 있습니다. 기준과 일치하는 문서가 더 있더라도 무시됩니다.

따라서이를 극복하기 위해 업데이트 문에 "멀티"옵션을 지정할 수 있습니다. 즉, 쿼리 기준과 일치하는 모든 문서를 업데이트합니다. 컬렉션의 모든 문서를 스캔하여 기준과 업데이트와 일치하는 것들을 찾습니다.

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

나는 같은 문제가 있었고 해결책을 찾았고 매력처럼 작동합니다.

다음과 같이 플래그 멀티를 true로 설정합니다.

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

도움이되기를 바랍니다. :)

당신은 사용할 수 있습니다 .`

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

MongoDB의 모든 최신 버전 updatemany () 잘 작동합니다

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

이것을 공유해 주셔서 감사합니다. 2.6.7과 함께 사용했으며 다음 쿼리가 방금 작동했습니다.

모든 문서 :

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

단일 문서 :

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top