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

MongoDB에서 필드와 값 삭제하기: $unset 연산자 완벽 가이드

MongoDB에서 특정 필드와 그 값을 삭제하고 싶다면 $unset 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 $unset 연산자로 문서에서 필드를 제거하는 방법을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.

> db.deleteFieldDemo.insertOne({"FirstName":"John","LastName":"Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb9fb767219729fde21ddad")
}
> db.deleteFieldDemo.insertOne({"FirstName":"David","LastName":"Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb9fb837219729fde21ddae")
}
> db.deleteFieldDemo.insertOne({"FirstName":"Carol","LastName":"Taylor"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb9fb8d7219729fde21ddaf")
}

2. 현재 저장된 문서 확인하기

다음은 find() 메서드를 사용하여 컬렉션의 모든 문서를 조회하는 쿼리입니다.

> db.deleteFieldDemo.find().pretty();

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

{
   "_id" : ObjectId("5cb9fb767219729fde21ddad"),
   "FirstName" : "John",
   "LastName" : "Smith"
}
{
   "_id" : ObjectId("5cb9fb837219729fde21ddae"),
   "FirstName" : "David",
   "LastName" : "Miller"
}
{
   "_id" : ObjectId("5cb9fb8d7219729fde21ddaf"),
   "FirstName" : "Carol",
   "LastName" : "Taylor"
}

현재 세 개의 문서 모두 FirstNameLastName 필드를 포함하고 있는 것을 확인할 수 있습니다.

3. $unset 연산자로 필드 삭제하기

이제 $unset 연산자를 사용하여 모든 문서에서 FirstName 필드와 해당 값을 삭제해 보겠습니다.

> db.deleteFieldDemo.update(
...    { FirstName: { $exists: true } },
...    { $unset: { FirstName: 1 } },
...    false,
...    true
... );
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

쿼리의 각 부분을 자세히 살펴보겠습니다.

  • { FirstName: { $exists: true } }: FirstName 필드가 존재하는 문서만 대상으로 지정합니다.
  • { $unset: { FirstName: 1 } }: FirstName 필드를 문서에서 제거합니다. 여기서 값(1)은 어떤 값을 넣어도 무시되며, 필드의 존재 여부에만 의미가 있습니다.
  • false: upsert 옵션으로, 조건에 맞는 문서가 없을 경우 새 문서를 생성하지 않습니다.
  • true: multi 옵션으로, 조건에 일치하는 모든 문서에 업데이트를 적용합니다.

실행 결과 nModified: 3으로 표시되어, 세 개의 문서가 모두 성공적으로 수정되었음을 알 수 있습니다.

참고: MongoDB 3.2 이상 버전에서는 updateMany() 메서드를 사용하여 더 간결하게 작성할 수 있습니다. db.deleteFieldDemo.updateMany({}, { $unset: { FirstName: 1 } })

4. 삭제 결과 확인하기

FirstName 필드가 컬렉션에서 실제로 삭제되었는지 다시 한번 조회하여 확인해 보겠습니다.

> db.deleteFieldDemo.find().pretty();

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

{ "_id" : ObjectId("5cb9fb767219729fde21ddad"), "LastName" : "Smith" }
{ "_id" : ObjectId("5cb9fb837219729fde21ddae"), "LastName" : "Miller" }
{ "_id" : ObjectId("5cb9fb8d7219729fde21ddaf"), "LastName" : "Taylor" }

모든 문서에서 FirstName 필드가 사라지고 _idLastName 필드만 남은 것을 확인할 수 있습니다.

정리

MongoDB에서 필드를 삭제할 때는 $unset 연산자를 사용합니다. 주요 포인트는 다음과 같습니다.

  • $unset은 필드 자체를 문서에서 완전히 제거합니다(값을 null로 설정하는 것과 다릅니다).
  • 여러 문서에 적용하려면 multi 옵션(true) 또는 updateMany()를 반드시 사용해야 합니다.
  • $exists: true 조건을 함께 사용하면 해당 필드가 있는 문서만 정확히 대상으로 지정할 수 있습니다.