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

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

MongoDB에서 특정 필드만 업데이트하기

MongoDB에서 문서 전체를 교체하지 않고 특정 필드만 수정하고 싶다면 $set 연산자를 사용해야 합니다. $set은 지정한 필드의 값만 변경하고 나머지 필드는 그대로 유지해 주기 때문에, 부분 업데이트(partial update)에 가장 널리 쓰이는 방법입니다.

이 글에서는 실제 예제를 통해 $set 연산자로 특정 필드만 업데이트하는 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용하여 demo265 컬렉션에 문서 세 개를 삽입합니다.

> db.demo265.insertOne({"id":101,"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e480d781627c0c63e7dbaa4")
}
> db.demo265.insertOne({"id":102,"Name":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e480d7d1627c0c63e7dbaa5")
}
> db.demo265.insertOne({"id":103,"Name":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e480d841627c0c63e7dbaa6")
}

2단계: find()로 전체 문서 조회

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo265.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e480d781627c0c63e7dbaa4"), "id" : 101, "Name" : "Chris" }
{ "_id" : ObjectId("5e480d7d1627c0c63e7dbaa5"), "id" : 102, "Name" : "Bob" }
{ "_id" : ObjectId("5e480d841627c0c63e7dbaa6"), "id" : 103, "Name" : "David" }

3단계: $set으로 특정 필드만 업데이트

다음은 Name이 "David"인 문서에서 id 필드만 10004로 변경하는 쿼리입니다.

> db.demo265.update({Name:"David"},{$set:{id:10004}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과인 WriteResult를 보면 조건에 일치한 문서가 1개(nMatched: 1)이고, 실제로 수정된 문서도 1개(nModified: 1)임을 알 수 있습니다.

4단계: 업데이트 결과 확인

다시 find() 메서드로 전체 문서를 조회하여 변경 사항을 확인해 보겠습니다.

> db.demo265.find();

출력 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e480d781627c0c63e7dbaa4"), "id" : 101, "Name" : "Chris" }
{ "_id" : ObjectId("5e480d7d1627c0c63e7dbaa5"), "id" : 102, "Name" : "Bob" }
{ "_id" : ObjectId("5e480d841627c0c63e7dbaa6"), "id" : 10004, "Name" : "David" }

David 문서의 id 값만 103에서 10004로 변경되었고, Name 필드는 그대로 유지된 것을 확인할 수 있습니다.

핵심 정리

  • $set 연산자: 지정한 필드의 값만 변경하며, 나머지 필드는 삭제되거나 영향을 받지 않습니다.
  • update() vs replace: $set 없이 업데이트하면 새 문서로 통째로 교체되므로 주의해야 합니다.
  • 존재하지 않는 필드: $set으로 지정한 필드가 문서에 없으면 해당 필드가 자동으로 추가됩니다.

참고로 최신 MongoDB 버전에서는 update() 대신 updateOne(), updateMany() 메서드 사용이 권장됩니다. 예를 들어 db.demo265.updateOne({Name:"David"}, {$set:{id:10004}})처럼 작성하면 동일한 결과를 얻을 수 있습니다.