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

MongoDB 객체에서 항목 삭제하는 방법 – $unset 연산자 완벽 가이드

MongoDB 객체에서 항목 삭제하기: $unset 연산자 활용법

MongoDB에서 객체(내장 문서) 안에 있는 특정 항목, 즉 필드를 삭제하려면 $unset 연산자를 사용하면 됩니다. $unset은 지정된 필드를 해당 문서에서 완전히 제거하는 역할을 하며, 값이 단순히 비어 있거나 null로 설정되는 것이 아니라 필드 자체가 사라진다는 점이 특징입니다.

이번 글에서는 예제 컬렉션을 직접 만들어 보고, $unset을 이용해 객체 내부의 필드를 삭제하는 전체 과정을 단계별로 살펴보겠습니다.

1단계: 예제 컬렉션 생성 및 문서 삽입

먼저 demo467이라는 컬렉션을 생성하고 두 개의 문서를 삽입합니다. 각 문서에는 Information이라는 객체가 들어 있으며, 그 안에 Name 필드가 포함되어 있습니다.

> db.demo467.insertOne(
... {
... _id:101,
... "Information":{"Name":"Chris"}
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo467.insertOne(
... {
... _id:102,
... "Information":{"Name":"David"}
... }
... );
{ "acknowledged" : true, "insertedId" : 102 }

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

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

> db.demo467.find();

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

{ "_id" : 101, "Information" : { "Name" : "Chris" } }
{ "_id" : 102, "Information" : { "Name" : "David" } }

3단계: $unset으로 객체 내부의 필드 삭제

이제 객체에서 항목을 삭제하는 핵심 쿼리입니다. 아래 예제에서는 _id가 102인 문서의 Information.Name 필드를 $unset으로 제거합니다.

> db.demo467.update({_id:102},{$unset: {"Information.Name":1}},{multi: true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

참고: 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 사용이 권장됩니다. 예를 들어 db.demo467.updateOne({_id:102}, {$unset: {"Information.Name": ""}})처럼 작성하면 동일한 결과를 얻을 수 있습니다.

4단계: 삭제 결과 확인

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

> db.demo467.find();

실행 결과는 다음과 같습니다.

{ "_id" : 101, "Information" : { "Name" : "Chris" } }
{ "_id" : 102, "Information" : { } }

_id가 102인 문서를 보면 Information 객체 안의 Name 필드가 완전히 삭제되어 빈 객체만 남아 있는 것을 확인할 수 있습니다. 반면 _id가 101인 문서는 영향을 받지 않았습니다.

정리

MongoDB에서 객체 내부의 특정 항목을 삭제할 때는 $unset 연산자가 가장 간단하고 확실한 방법입니다. 점 표기법(dot notation)을 사용해 "객체명.필드명": 1 형태로 지정하면 중첩된 필드까지 정확하게 제거할 수 있으니, 불필요한 데이터를 정리할 때 적극적으로 활용해 보시기 바랍니다.