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

MongoDB에서 하위 속성 배열의 요소를 제거하는 방법 – $pull 연산자 완벽 가이드

MongoDB에서 문서 내부에 중첩된 배열(하위 속성)의 특정 요소를 제거하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 값을 배열에서 자동으로 찾아 삭제해 주는 강력한 업데이트 연산자입니다.

1. 샘플 컬렉션 생성하기

먼저 실습을 위해 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.demo388.insertOne(
...     {
...         _id: '101',
...         userDetails: {
...             isMarried: false,
...             userInfo: [
...                 {
...                     Name: "Chris",
...                     Age: 21
...                 }
...             ]
...         }
...     }
... );
{ "acknowledged" : true, "insertedId" : "101" }

2. 컬렉션의 모든 문서 조회하기

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

> db.demo388.find();

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

{ "_id" : "101", "userDetails" : { "isMarried" : false, "userInfo" : [ { "Name" : "Chris", "Age" : 21 } ] } }

현재 userDetails.userInfo라는 하위 속성 배열 안에 Name이 "Chris"인 객체가 하나 들어있는 상태입니다.

3. $pull로 하위 속성 배열의 요소 제거하기

다음은 중첩된 배열에서 특정 요소를 제거하는 쿼리입니다. 점 표기법(dot notation)으로 userDetails.userInfo 경로를 지정하고, 제거할 조건을 $pull에 전달합니다.

> db.demo388.update(
...     { "_id": "101" },
...     { "$pull": { "userDetails.userInfo": { "Name":"Chris" } } }
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과를 보면 nModified : 1로 표시되어, 하나의 문서가 성공적으로 수정되었음을 알 수 있습니다.

4. 제거 후 결과 확인하기

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

> db.demo388.find();

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

{ "_id" : "101", "userDetails" : { "isMarried" : false, "userInfo" : [ ] } }

Name이 "Chris"였던 요소가 배열에서 완전히 제거되어 userInfo가 빈 배열 [ ]이 된 것을 확인할 수 있습니다.

핵심 정리

  • $pull 연산자: 조건과 일치하는 배열 요소를 제거할 때 사용합니다.
  • 점 표기법: 중첩된 필드에 접근할 때는 상위필드.하위필드 형태로 경로를 지정합니다.
  • 조건 매칭: $pull에 전달한 객체와 일치하는 모든 배열 요소가 한 번에 제거됩니다.
  • update() 대체: 최신 MongoDB 버전에서는 updateOne() 또는 updateMany() 사용을 권장합니다.