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 문서 내 배열 데이터를 손쉽게 관리할 수 있습니다.