MongoDB에서 필드의 모든 값을 특정 문자열로 변경하기
MongoDB에서 컬렉션 내 모든 문서의 특정 필드 값을 동일한 문자열로 변경하려면 update() 메서드와 함께 multi:true 옵션을 사용해야 합니다. 이 옵션을 지정하지 않으면 조건에 일치하는 첫 번째 문서만 수정되므로 주의가 필요합니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성
먼저 여러 문서를 포함하는 컬렉션을 생성합니다.
> db.demo720.insertOne({"SubjectName":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eaae7ca43417811278f5883")
}
> db.demo720.insertOne({"SubjectName":"Java"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eaae7ce43417811278f5884")
}
> db.demo720.insertOne({"SubjectName":"C"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eaae7d143417811278f5885")
}
> db.demo720.insertOne({"SubjectName":"C++"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eaae7d543417811278f5886")
}2단계: 현재 문서 확인
find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.
> db.demo720.find();
위 명령은 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5eaae7ca43417811278f5883"), "SubjectName" : "MySQL" }
{ "_id" : ObjectId("5eaae7ce43417811278f5884"), "SubjectName" : "Java" }
{ "_id" : ObjectId("5eaae7d143417811278f5885"), "SubjectName" : "C" }
{ "_id" : ObjectId("5eaae7d543417811278f5886"), "SubjectName" : "C++" }3단계: multi:true 옵션으로 전체 문서 업데이트
다음은 “SubjectName” 필드의 모든 값을 “MongoDB”로 변경하는 쿼리입니다. 빈 객체 {}를 조건으로 지정하면 컬렉션의 모든 문서가 대상이 됩니다.
> db.demo720.update({},{$set:{SubjectName:"MongoDB"}},{multi:true});
WriteResult({ "nMatched" : 4, "nUpserted" : 0, "nModified" : 4 })실행 결과에서 nMatched: 4, nModified: 4는 4개의 문서가 모두 일치했으며 모두 성공적으로 수정되었음을 의미합니다.
4단계: 업데이트 결과 확인
다시 find() 메서드로 모든 문서를 조회하여 변경 사항을 확인합니다.
> db.demo720.find();
모든 문서의 SubjectName 값이 “MongoDB”로 변경된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5eaae7ca43417811278f5883"), "SubjectName" : "MongoDB" }
{ "_id" : ObjectId("5eaae7ce43417811278f5884"), "SubjectName" : "MongoDB" }
{ "_id" : ObjectId("5eaae7d143417811278f5885"), "SubjectName" : "MongoDB" }
{ "_id" : ObjectId("5eaae7d543417811278f5886"), "SubjectName" : "MongoDB" }참고: 최신 버전에서는 updateMany() 사용 권장
MongoDB 4.2 이상 버전에서는 update() 대신 updateMany() 메서드를 사용하는 것이 좋습니다. updateMany()는 기본적으로 조건에 일치하는 모든 문서를 업데이트하므로 별도로 multi:true 옵션을 지정할 필요가 없습니다.
> db.demo720.updateMany({},{$set:{SubjectName:"MongoDB"}});이처럼 $set 연산자와 멀티 업데이트 옵션을 활용하면 컬렉션 전체의 필드 값을 손쉽게 일괄 변경할 수 있습니다.