MongoDB updateMany()로 여러 문서 일괄 업데이트하기
MongoDB에서 필터 조건과 일치하는 모든 문서를 한 번에 업데이트하려면 updateMany() 함수를 사용하면 됩니다. 이 메서드는 조건에 맞는 문서를 전부 찾아 지정된 변경 사항을 적용하며, 업데이트 결과로 매칭된 문서 수와 실제 수정된 문서 수를 함께 반환합니다.
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo476.insertOne({_id:1,"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo476.insertOne({_id:2,"Name":"David"});
{ "acknowledged" : true, "insertedId" : 2 }
> db.demo476.insertOne({_id:3,"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : 3 }
> db.demo476.insertOne({_id:4,"Name":"Carol"});
{ "acknowledged" : true, "insertedId" : 4 }컬렉션의 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo476.find();
위 쿼리를 실행하면 다음과 같은 출력 결과가 나타납니다.
{ "_id" : 1, "Name" : "Chris" }
{ "_id" : 2, "Name" : "David" }
{ "_id" : 3, "Name" : "Bob" }
{ "_id" : 4, "Name" : "Carol" }특정 ID 목록에 해당하는 문서 업데이트하기
여러 개의 특정 ID와 일치하는 문서를 동시에 업데이트하려면, 필터 조건에서 $in 연산자를 활용하면 됩니다. 아래 예제는 _id가 1 또는 3인 문서만 골라 Name 필드를 "Robert"로 변경합니다.
> db.demo476.updateMany({_id:{$in:[1,3]}},{$set:{Name:"Robert"}});
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }실행 결과를 보면 matchedCount와 modifiedCount가 각각 2로 표시되어, 두 개의 문서가 정상적으로 업데이트되었음을 확인할 수 있습니다.
업데이트 결과 확인하기
다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인해 보겠습니다.
> db.demo476.find();
출력 결과는 다음과 같습니다.
{ "_id" : 1, "Name" : "Robert" }
{ "_id" : 2, "Name" : "David" }
{ "_id" : 3, "Name" : "Robert" }
{ "_id" : 4, "Name" : "Carol" }_id가 1과 3인 문서의 Name 값이 "Robert"로 변경된 것을 볼 수 있습니다. 이처럼 updateMany()와 $in 연산자를 조합하면, 지정한 ID 목록에 해당하는 여러 문서를 단일 쿼리로 효율적으로 업데이트할 수 있습니다.