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

MongoDB에서 $set 연산자로 특정 필드만 업데이트하는 방법

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 })

WriteResultnModified : 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 없이 업데이트 쿼리를 실행하면 기존 문서 전체가 새 문서로 교체되어 데이터가 손실될 수 있습니다. 이 점만 주의하면 안전하게 원하는 필드만 골라서 수정할 수 있습니다.