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

MongoDB 배열에서 요소를 일치시켜 제거하는 쿼리 사용법

MongoDB $pullAll 연산자로 배열 요소 일괄 제거하기

배열에서 특정 요소를 찾아 한 번에 제거하려면 MongoDB의 $pullAll 연산자를 사용하면 됩니다. $pullAll은 지정한 값과 정확히 일치하는 모든 요소를 배열에서 삭제해 주는 업데이트 연산자입니다.

먼저 예제용 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.removeElementsDemo.insertOne({"ListOfNames":["Mike","Sam","David","Carol"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e071e5a25ddae1f53b62203")
}

삽입된 문서 확인하기

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

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

위 쿼리는 다음과 같은 결과를 출력합니다.

{
   "_id" : ObjectId("5e071e5a25ddae1f53b62203"),
      "ListOfNames" : [
         "Mike",
         "Sam",
         "David",
         "Carol"
   ]
}

$pullAll로 특정 요소 제거하기

이제 배열에서 "Carol"이라는 값을 일치시켜 제거하는 쿼리를 실행해 보겠습니다. update() 메서드와 함께 $pullAll을 사용합니다.

> db.removeElementsDemo.update(
... { },
... {
...    $pullAll:
...    {
...        "ListOfNames": ["Carol"]
...    }
... }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과 nMatched: 1, nModified: 1이 반환되었으므로, 하나의 문서가 매칭되어 성공적으로 수정되었습니다.

제거 후 결과 확인

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

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

출력 결과를 보면 단일 값인 "Carol"만 배열에서 제거된 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5e071e5a25ddae1f53b62203"),
   "ListOfNames" : [
      "Mike",
      "Sam",
      "David"
   ]
}

참고: 여러 요소 동시 제거 및 $pull과의 차이

$pullAll은 여러 값을 동시에 제거할 수도 있습니다. 예를 들어 ["Sam", "David"]처럼 배열 형태로 전달하면 해당 값들이 모두 삭제됩니다.

반면 조건(예: 범위 비교)에 따라 요소를 제거하고 싶다면 $pull 연산자를 사용하는 것이 적합합니다. 즉, 정확한 값 목록으로 제거할 때는 $pullAll, 조건 기반 제거에는 $pull을 사용한다고 정리할 수 있습니다.