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

MongoDB에서 여러 문서를 한 번에 업데이트하는 방법 – multi 옵션 활용법

개요

MongoDB에서 조건에 일치하는 여러 문서를 동시에 업데이트하려면 update() 메서드의 세 번째 인자로 multi: true 옵션을 설정해야 합니다. 기본 설정에서는 조건과 일치하는 첫 번째 문서 하나만 수정되기 때문에, 다수의 문서를 변경하고 싶다면 반드시 이 옵션을 활성화해야 합니다.

먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

1. 테스트용 컬렉션 생성

> db.demo312.insertOne({"FirstName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ce16f8647eb59e56204a")
}
> db.demo312.insertOne({"FirstName":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ce19f8647eb59e56204b")
}
> db.demo312.insertOne({"FirstName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ce1cf8647eb59e56204c")
}
> db.demo312.insertOne({"FirstName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ce20f8647eb59e56204d")
}
> db.demo312.insertOne({"FirstName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ce22f8647eb59e56204e")
}

위 코드에서는 'Robert' 이름을 가진 문서 3개와 'Bob', 'David' 문서 각 1개씩, 총 5개의 문서를 demo312 컬렉션에 삽입했습니다.

2. 현재 데이터 확인

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

> db.demo312.find();

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

{ "_id" : ObjectId("5e50ce16f8647eb59e56204a"), "FirstName" : "Robert" }
{ "_id" : ObjectId("5e50ce19f8647eb59e56204b"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5e50ce1cf8647eb59e56204c"), "FirstName" : "Robert" }
{ "_id" : ObjectId("5e50ce20f8647eb59e56204d"), "FirstName" : "David" }
{ "_id" : ObjectId("5e50ce22f8647eb59e56204e"), "FirstName" : "Robert" }

3. multi 옵션으로 여러 문서 업데이트하기

다음은 FirstName 필드 값이 "Robert"인 모든 문서를 "Sam"으로 변경하는 쿼리입니다. multi: true 옵션 덕분에 조건과 일치하는 3개의 문서가 한 번에 모두 수정됩니다.

> db.demo312.update({"FirstName":"Robert"},{$set:{"FirstName":"Sam"}},{multi:true});
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

반환된 WriteResult를 살펴보면 nMatched: 3, nModified: 3으로 표시됩니다. 이는 3개의 문서가 조건과 일치했고, 그 3개 모두 성공적으로 수정되었음을 의미합니다.

4. 업데이트 후 결과 확인

변경 사항을 확인하기 위해 다시 find() 메서드로 전체 문서를 조회해 보겠습니다.

> db.demo312.find();

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

{ "_id" : ObjectId("5e50ce16f8647eb59e56204a"), "FirstName" : "Sam" }
{ "_id" : ObjectId("5e50ce19f8647eb59e56204b"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5e50ce1cf8647eb59e56204c"), "FirstName" : "Sam" }
{ "_id" : ObjectId("5e50ce20f8647eb59e56204d"), "FirstName" : "David" }
{ "_id" : ObjectId("5e50ce22f8647eb59e56204e"), "FirstName" : "Sam" }

'Robert'였던 문서 3개가 모두 'Sam'으로 변경된 것을 확인할 수 있으며, 'Bob'과 'David' 문서는 영향을 받지 않았습니다.

핵심 정리

- MongoDB의 update() 메서드는 기본적으로 조건과 일치하는 첫 번째 문서만 수정합니다.
- multi: true 옵션을 사용하면 조건에 일치하는 모든 문서를 한 번에 업데이트할 수 있습니다.
- 반환되는 WriteResult의 nMatched(일치한 문서 수)와 nModified(실제 수정된 문서 수) 값을 통해 업데이트 결과를 확인할 수 있습니다.
- 참고로 최신 MongoDB 버전에서는 updateMany() 메서드를 사용하면 multi 옵션 없이도 동일한 결과를 얻을 수 있습니다.