MongoDB에서 문서 전체를 교체하지 않고 특정 필드만 선택적으로 수정하려면 $set 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 특정 필드 업데이트, 결과 확인까지 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성
먼저 테스트에 사용할 컬렉션을 만들고 문서를 삽입합니다.
> db.updateOnlySpecificFieldDemo.insertOne({"EmployeeName":"John","EmployeeCountryName":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ea849d628fa4220163b72")
}
> db.updateOnlySpecificFieldDemo.insertOne({"EmployeeName":"Larry","EmployeeCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ea853d628fa4220163b73")
}
> db.updateOnlySpecificFieldDemo.insertOne({"EmployeeName":"David","EmployeeCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ea85bd628fa4220163b74")
}총 세 개의 직원 문서가 정상적으로 삽입되었습니다.
2. 저장된 문서 확인하기
다음은 find() 메서드를 사용해 컬렉션의 모든 문서를 조회하는 쿼리입니다.
> db.updateOnlySpecificFieldDemo.find().pretty();
실행하면 아래와 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5c9ea849d628fa4220163b72"),
"EmployeeName" : "John",
"EmployeeCountryName" : "UK"
}
{
"_id" : ObjectId("5c9ea853d628fa4220163b73"),
"EmployeeName" : "Larry",
"EmployeeCountryName" : "US"
}
{
"_id" : ObjectId("5c9ea85bd628fa4220163b74"),
"EmployeeName" : "David",
"EmployeeCountryName" : "AUS"
}3. $set으로 특정 필드만 업데이트하기
이제 첫 번째 문서(_id: 5c9ea849d628fa4220163b72)의 EmployeeName 필드만 "Robert"로 변경해 보겠습니다.
> db.updateOnlySpecificFieldDemo.update({_id:ObjectId("5c9ea849d628fa4220163b72")},
... {$set: {"EmployeeName":"Robert"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })WriteResult의 nModified : 1 값은 하나의 문서가 성공적으로 수정되었음을 의미합니다. 여기서 중요한 점은 $set을 사용했기 때문에 해당 문서의 나머지 필드(EmployeeCountryName)는 그대로 유지된다는 것입니다.
참고: 위 예제의 update() 메서드는 현재 deprecated(사용 중단 권고) 상태입니다. 최신 MongoDB 버전에서는 단일 문서 수정 시 updateOne(), 여러 문서 수정 시 updateMany()를 사용하는 것이 좋습니다.
4. 업데이트 결과 검증하기
필드가 실제로 "John"에서 "Robert"로 변경되었는지 다시 조회해 확인해 보겠습니다.
> db.updateOnlySpecificFieldDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c9ea849d628fa4220163b72"),
"EmployeeName" : "Robert",
"EmployeeCountryName" : "UK"
}
{
"_id" : ObjectId("5c9ea853d628fa4220163b73"),
"EmployeeName" : "Larry",
"EmployeeCountryName" : "US"
}
{
"_id" : ObjectId("5c9ea85bd628fa4220163b74"),
"EmployeeName" : "David",
"EmployeeCountryName" : "AUS"
}위 출력 결과에서 볼 수 있듯이 첫 번째 문서의 EmployeeName 필드가 "Robert"로 성공적으로 업데이트되었으며, 다른 필드들은 변경 없이 그대로 유지된 것을 확인할 수 있습니다.
마무리
MongoDB에서 특정 필드만 수정할 때는 반드시 $set 연산자를 사용하세요. $set 없이 업데이트 쿼리를 실행하면 기존 문서 전체가 새 문서로 교체되어 데이터가 손실될 수 있습니다. 이 점만 주의하면 안전하게 원하는 필드만 골라서 수정할 수 있습니다.