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

MongoDB에서 하위 문서(subdocument) 제거하는 방법 – $pull 연산자 완벽 가이드

MongoDB에서 문서(document) 내부에 포함된 하위 문서(subdocument)를 제거하려면 update() 메서드와 함께 $pull 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 하위 문서를 삭제하는 과정을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 예제 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 details.anotherDetails라는 배열 안에 여러 개의 하위 문서가 들어 있는 구조입니다.

> db.demo538.insertOne(
... {
...     id: 101,
...     "details":
...     {
...        anotherDetails:
...        [
...            {
...               "Name": "Chris",
...               Age: 21
...            },
...            {
...               "Name": "David",
...               Age: 23
...            },
...            {
...               "Name": "Bob",
...               Age: 20
...            }
...        ]
...     }
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8c8f0aef4dcbee04fbbc08")
}

2. 현재 문서 확인하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회해 보겠습니다.

> db.demo538.find();

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

{ "_id" : ObjectId("5e8c8f0aef4dcbee04fbbc08"), "id" : 101, "details" : { "anotherDetails" : [
    { "Name" : "Chris", "Age" : 21 }, { "Name" : "David", "Age" : 23 }, { "Name" : "Bob", "Age" : 20 } ]
} }

현재 anotherDetails 배열에는 Chris(21세), David(23세), Bob(20세) 세 개의 하위 문서가 저장되어 있습니다.

3. $pull 연산자로 하위 문서 제거하기

이제 $pull 연산자를 사용하여 특정 조건에 맞는 하위 문서를 제거해 보겠습니다. 여기서는 나이(Age)가 23인 David의 데이터를 삭제하는 쿼리입니다.

> db.demo538.update({ id: 101 },
... { $pull: { "details.anotherDetails": { "Age": 23 } } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

쿼리 설명:

  • { id: 101 }: 수정할 대상 문서를 찾는 조건입니다.
  • $pull: 지정한 조건과 일치하는 요소를 배열에서 제거하는 연산자입니다.
  • "details.anotherDetails": { "Age": 23 }: 점 표기법(dot notation)으로 중첩된 배열 경로를 지정하고, Age가 23인 하위 문서를 삭제 대상으로 지정합니다.
  • nModified: 1: 하나의 문서가 성공적으로 수정되었음을 의미합니다.

4. 삭제 결과 확인

다시 find() 메서드로 결과를 확인해 보겠습니다.

> db.demo538.find();

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

{ "_id" : ObjectId("5e8c8f0aef4dcbee04fbbc08"), "id" : 101, "details" : { "anotherDetails" : [ {
"Name" : "Chris", "Age" : 21 }, { "Name" : "Bob", "Age" : 20 } ] } }

출력 결과를 보면 Age가 23인 David의 하위 문서가 배열에서 성공적으로 제거되고, Chris와 Bob의 데이터만 남아 있는 것을 확인할 수 있습니다.

마무리

MongoDB에서 중첩된 배열 안의 하위 문서를 삭제할 때는 $pull 연산자가 가장 간단하고 효율적인 방법입니다. 참고로 최신 버전의 MongoDB에서는 update() 대신 updateOne() 또는 updateMany() 사용을 권장하며, 동작 방식은 동일하게 적용됩니다. 조건을 다양하게 변경하여 이름, 나이 등 원하는 필드 기준으로 하위 문서를 손쉽게 관리해 보세요.