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

MongoDB 배열에서 요소를 삭제하는 방법 – $pull 연산자 활용 가이드

MongoDB에서 배열에 포함된 특정 요소를 삭제하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 값을 배열에서 제거해 주는 업데이트 연산자로, 조건에 맞는 모든 항목을 한 번에 처리할 수 있습니다. 이번 글에서는 실제 예제를 통해 배열에서 요소를 삭제하는 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 데모용 컬렉션을 만들고 문서를 삽입합니다. insertOne() 메서드를 사용하면 문서를 손쉽게 추가할 수 있습니다.

> db.demo279.insertOne({id:[101,103,105,110]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e490af7dd099650a5401a58")
}
> db.demo279.insertOne({id:[107,111,110]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e490b06dd099650a5401a59")
}

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

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

> db.demo279.find();

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

{ "_id" : ObjectId("5e490af7dd099650a5401a58"), "id" : [ 101, 103, 105, 110 ] }
{ "_id" : ObjectId("5e490b06dd099650a5401a59"), "id" : [ 107, 111, 110 ] }

3. $pull로 배열에서 요소 삭제하기

이제 두 문서의 id 배열에서 값 110을 모두 제거해 보겠습니다. 조건에 일치하는 여러 문서를 동시에 수정하려면 세 번째 인자로 {multi:true} 옵션을 반드시 전달해야 합니다.

> db.demo279.update({},{$pull:{id:110}},{multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

실행 결과에서 nMatched와 nModified가 각각 2로 표시되는데, 이는 두 개의 문서가 조건에 일치했고 두 문서 모두 성공적으로 수정되었음을 의미합니다.

4. 삭제 결과 확인하기

다시 find() 메서드로 전체 문서를 조회해 보면 값 110이 배열에서 사라진 것을 확인할 수 있습니다.

> db.demo279.find();
{ "_id" : ObjectId("5e490af7dd099650a5401a58"), "id" : [ 101, 103, 105 ] }
{ "_id" : ObjectId("5e490b06dd099650a5401a59"), "id" : [ 107, 111 ] }

마무리 및 추가 팁

MongoDB에서 배열 요소를 삭제할 때는 $pull 연산자가 가장 간편하고 직관적인 방법입니다. 특정 값뿐만 아니라 $gte, $lte 같은 조건 연산자를 함께 사용하면 특정 범위에 해당하는 여러 요소를 한 번에 제거할 수도 있습니다. 참고로 최신 버전의 MongoDB에서는 update()보다 updateMany() 메서드 사용이 권장되므로, multi:true 옵션 대신 updateMany()를 활용하는 것이 좋은 습관입니다.