MongoDB에서 모든 문서 업데이트하기
MongoDB에서 컬렉션에 있는 모든 문서를 한 번에 수정하려면 updateMany() 메서드를 사용하면 됩니다. 이 메서드는 조건에 일치하는 모든 문서를 일괄적으로 업데이트해 주기 때문에, 대량의 데이터를 다룰 때 매우 유용합니다.
이번 글에서는 실제 예제를 통해 updateMany()의 사용법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성
먼저 문서가 포함된 컬렉션을 만들어 보겠습니다. 아래 쿼리는 updateManyDocumentsDemo라는 컬렉션에 학생 정보를 하나씩 삽입합니다.
> db.updateManyDocumentsDemo.insertOne({"StudentName":"John","StudentLastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c948edd4cf1f7a64fa4df48")
}
> db.updateManyDocumentsDemo.insertOne({"StudentName":"John","StudentLastName":"Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c948ee64cf1f7a64fa4df49")
}
> db.updateManyDocumentsDemo.insertOne({"StudentName":"Carol","StudentLastName":"Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c948ef14cf1f7a64fa4df4a")
}
> db.updateManyDocumentsDemo.insertOne({"StudentName":"David","StudentLastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c948f044cf1f7a64fa4df4b")
}2. 저장된 문서 확인하기
컬렉션에 정상적으로 데이터가 들어갔는지 확인하려면 find() 메서드를 사용합니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬해서 출력할 수 있습니다.
> db.updateManyDocumentsDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c948edd4cf1f7a64fa4df48"),
"StudentName" : "John",
"StudentLastName" : "Smith"
}
{
"_id" : ObjectId("5c948ee64cf1f7a64fa4df49"),
"StudentName" : "John",
"StudentLastName" : "Doe"
}
{
"_id" : ObjectId("5c948ef14cf1f7a64fa4df4a"),
"StudentName" : "Carol",
"StudentLastName" : "Taylor"
}
{
"_id" : ObjectId("5c948f044cf1f7a64fa4df4b"),
"StudentName" : "David",
"StudentLastName" : "Miller"
}3. updateMany()로 모든 문서 업데이트
이제 핵심 단계입니다. 아래 쿼리는 빈 필터({})를 전달하여 컬렉션 내 모든 문서를 대상으로, $rename 연산자를 통해 StudentName 필드의 이름을 StudentFirstName으로 변경합니다.
> db.updateManyDocumentsDemo.updateMany({}, {$rename: {'StudentName': "StudentFirstName"}});실행 결과는 다음과 같습니다. matchedCount와 modifiedCount가 각각 4로 표시되는데, 이는 4개의 문서가 조건에 일치했고 4개 모두 성공적으로 수정되었음을 의미합니다.
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }참고: 첫 번째 인자로 빈 객체 {}를 넘기면 필터 조건 없이 모든 문서가 대상이 됩니다. 반면 특정 조건(예: {"StudentName": "John"})을 지정하면 해당 조건에 맞는 문서만 업데이트됩니다.
4. 업데이트 결과 검증
문서가 실제로 잘 변경되었는지 다시 한번 find() 메서드로 확인해 보겠습니다.
> db.updateManyDocumentsDemo.find().pretty();
출력 결과를 보면 모든 문서에서 StudentName 필드가 사라지고 StudentFirstName으로 이름이 변경된 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5c948edd4cf1f7a64fa4df48"),
"StudentLastName" : "Smith",
"StudentFirstName" : "John"
}
{
"_id" : ObjectId("5c948ee64cf1f7a64fa4df49"),
"StudentLastName" : "Doe",
"StudentFirstName" : "John"
}
{
"_id" : ObjectId("5c948ef14cf1f7a64fa4df4a"),
"StudentLastName" : "Taylor",
"StudentFirstName" : "Carol"
}
{
"_id" : ObjectId("5c948f044cf1f7a64fa4df4b"),
"StudentLastName" : "Miller",
"StudentFirstName" : "David"
}정리
MongoDB에서 여러 문서를 동시에 수정할 때는 updateMany() 메서드가 가장 적합합니다. 핵심 포인트를 요약하면 다음과 같습니다.
- 첫 번째 인자(필터):
{}를 넣으면 모든 문서가 대상이 되고, 조건을 넣으면 일치하는 문서만 업데이트됩니다. - 두 번째 인자(업데이트 연산자):
$rename(필드명 변경),$set(값 설정) 등 다양한 연산자를 활용할 수 있습니다. - 결과 확인: 반환되는
matchedCount와modifiedCount값으로 몇 개의 문서가 처리되었는지 파악할 수 있습니다.
이처럼 updateMany()를 활용하면 복잡한 스크립트 없이도 컬렉션 전체의 문서를 손쉽게 일괄 수정할 수 있습니다.