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

MongoDB 문서에서 배열 값 삭제하는 방법 ($pull 연산자 활용법)

MongoDB에서 배열 값 삭제하기

MongoDB에서 배열에 저장된 특정 값을 삭제하려면 $pull 연산자를 사용하면 됩니다. $pull은 기존 배열에서 지정한 조건과 일치하는 값을 모두 제거하는 업데이트 연산자입니다.

이 글에서는 실제 예제를 통해 $pull 연산자의 사용 방법을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입합니다. 학생 정보와 이메일 주소 목록을 배열 형태로 저장하는 구조입니다.

> db.demo535.insertOne(
... {
...     "studentId" : "101",
...     "studentName" : "Chris",
...     "ListOfMailIds" : [
...        "Chris@gmail.com",
...        "Chris@yahoo.com"
...     ]
... }
... )
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8c82bfef4dcbee04fbbc00")
}

2. 현재 데이터 확인

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

> db.demo535.find();

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

{ "_id" : ObjectId("5e8c82bfef4dcbee04fbbc00"), "studentId" : "101", "studentName" : "Chris",
"ListOfMailIds" : [ "Chris@gmail.com", "Chris@yahoo.com" ] }

현재 배열에는 두 개의 이메일 주소가 저장되어 있습니다.

3. $pull 연산자로 배열 값 삭제

이제 $pull 연산자를 사용해 배열에서 특정 이메일 주소를 삭제해 보겠습니다. 아래 쿼리는 ListOfMailIds 배열에서 "Chris@yahoo.com" 값을 제거합니다.

> db.demo535.update(
... { _id: ObjectId("5e8c82bfef4dcbee04fbbc00") },
... { $pull: { 'ListOfMailIds': 'Chris@yahoo.com' } }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nModified: 1이 반환되었으므로, 하나의 문서가 성공적으로 수정되었음을 확인할 수 있습니다.

💡 참고: 최신 MongoDB 버전에서는 deprecated된 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다.

4. 삭제 후 결과 확인

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

> db.demo535.find();

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

{ "_id" : ObjectId("5e8c82bfef4dcbee04fbbc00"), "studentId" : "101", "studentName" : "Chris", "ListOfMailIds" : [ "Chris@gmail.com" ] }

배열에서 "Chris@yahoo.com"이 성공적으로 제거되고 "Chris@gmail.com"만 남아 있는 것을 확인할 수 있습니다.

$pull 연산자 정리

  • $pull: 조건과 일치하는 배열 요소를 모두 제거합니다.
  • 단순 값뿐 아니라 조건식(예: $gte, $in)도 함께 사용할 수 있어 유연한 삭제가 가능합니다.
  • 조건과 일치하는 값이 여러 개라면 해당 값들이 모두 한 번에 삭제됩니다.

예를 들어 다음과 같이 조건식을 활용할 수도 있습니다.

{ $pull: { scores: { $gte: 80 } } }  // 80 이상인 점수를 모두 제거

이처럼 $pull 연산자를 활용하면 MongoDB 문서 내 배열 데이터를 손쉽게 관리할 수 있습니다.