Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 multi 옵션을 사용해 여러 문서의 값을 한 번에 업데이트하는 방법

MongoDB의 update() 메서드는 기본적으로 쿼리 조건에 일치하는 첫 번째 문서만 수정합니다. 따라서 조건에 해당하는 모든 문서를 한꺼번에 업데이트하려면 반드시 multi : true 옵션을 함께 지정해야 합니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 demo390이라는 컬렉션을 만들고 문서를 몇 개 삽입합니다.

> db.demo390.insertOne({"FirstName":"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5d1f3a22064be7ab44e7fa")
}
> db.demo390.insertOne({"FirstName":"David"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5d1f3e22064be7ab44e7fb")
}
> db.demo390.insertOne({"FirstName":"Bob"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5d1f4122064be7ab44e7fc")
}
> db.demo390.insertOne({"FirstName":"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5d1f4422064be7ab44e7fd")
}

이렇게 하면 "Chris"라는 이름을 가진 문서가 두 개 존재하게 됩니다.

2. 저장된 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo390.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e5d1f3a22064be7ab44e7fa"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5e5d1f3e22064be7ab44e7fb"), "FirstName" : "David" }
{ "_id" : ObjectId("5e5d1f4122064be7ab44e7fc"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5e5d1f4422064be7ab44e7fd"), "FirstName" : "Chris" }

3. multi : true 옵션으로 일괄 업데이트하기

이제 multi : true 옵션을 적용하여 "Chris"인 모든 문서의 이름을 "John"으로 변경해 보겠습니다.

> db.demo390.update({FirstName:"Chris"},{$set:{"FirstName":"John"}},{multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

결과를 보면 nMatched : 2, nModified : 2로 표시되는데, 이는 조건에 일치한 2개의 문서가 모두 성공적으로 수정되었음을 의미합니다. 만약 multi 옵션을 생략했다면 첫 번째 문서 하나만 변경되었을 것입니다.

4. 업데이트 결과 확인하기

다시 find() 메서드로 전체 문서를 조회합니다.

> db.demo390.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e5d1f3a22064be7ab44e7fa"), "FirstName" : "John" }
{ "_id" : ObjectId("5e5d1f3e22064be7ab44e7fb"), "FirstName" : "David" }
{ "_id" : ObjectId("5e5d1f4122064be7ab44e7fc"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5e5d1f4422064be7ab44e7fd"), "FirstName" : "John" }

조건에 일치했던 두 개의 "Chris" 문서가 모두 "John"으로 변경된 것을 확인할 수 있습니다.

참고: 최신 MongoDB 버전에서는?

MongoDB 4.2부터 update() 메서드는 deprecated(사용 중단 권고) 상태입니다. 최신 버전에서는 동일한 작업을 더 명확하게 수행할 수 있는 updateMany() 메서드를 사용하는 것이 좋습니다.

> db.demo390.updateMany(
...    { FirstName: "Chris" },
...    { $set: { FirstName: "John" } }
... );

updateMany()는 기본적으로 조건에 일치하는 모든 문서를 수정하므로 별도의 multi 옵션이 필요 없으며, 코드의 가독성과 유지보수성 면에서도 더 유리합니다.