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

MongoDB에서 $unset 연산자로 객체(필드)를 제거하는 방법

MongoDB에서 문서 내부의 객체나 특정 필드를 삭제하려면 $unset 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 $unset의 사용 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성 및 데이터 삽입

먼저 insertOne() 메서드를 사용해 demo348 컬렉션에 두 개의 문서를 삽입합니다.

> db.demo348.insertOne(
...     {
...     "details": {
...        "studentDetails":
...           {
...             StudentName: "Robert"
...          }
...    }
... 
... });
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e553556f8647eb59e5620b2")
}
> db.demo348.insertOne(
... {
...    "details": {
...       "studentDetails":
...          {
...            StudentName: "Mike"
...         }
...    }
... 
... });
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e553563f8647eb59e5620b3")
}

2. 삽입된 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo348.find();

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

{ "_id" : ObjectId("5e553556f8647eb59e5620b2"), "details" : { "studentDetails" : { "StudentName" : "Robert" } } }
{ "_id" : ObjectId("5e553563f8647eb59e5620b3"), "details" : { "studentDetails" : { "StudentName" : "Mike" } } }

3. $unset으로 객체 제거하기

이제 details.studentDetails 객체를 제거하는 쿼리를 실행해 보겠습니다. 조건을 빈 객체({})로 지정하고 multi 옵션을 true로 설정하면 컬렉션 내 모든 문서에 일괄 적용됩니다.

> db.demo348.update({},{$unset: { "details.studentDetails": ""}},{multi: true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

결과에서 nModified 값이 2로 표시된 것을 통해 두 개의 문서가 모두 정상적으로 수정되었음을 확인할 수 있습니다. 참고로 최신 버전의 MongoDB에서는 동일한 작업을 수행할 때 updateMany() 메서드를 사용하는 것이 권장됩니다.

4. 제거 결과 확인

다시 find() 메서드로 전체 문서를 조회해 보겠습니다.

> db.demo348.find();

실행 결과, 각 문서에서 studentDetails 객체가 완전히 제거되고 details 필드만 빈 상태로 남아 있는 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e553556f8647eb59e5620b2"), "details" : { } }
{ "_id" : ObjectId("5e553563f8647eb59e5620b3"), "details" : { } }

이처럼 $unset 연산자는 해당 필드의 값을 지정된 값으로 변경하는 것이 아니라, 필드 자체를 문서에서 완전히 삭제한다는 점을 기억하면 됩니다. 중첩된 객체나 하위 필드도 도트 표기법(dot notation)을 사용하면 손쉽게 제거할 수 있습니다.