MongoDB에서 배열에 저장된 객체(요소)를 삭제하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 모든 요소를 배열에서 제거하는 업데이트 연산자입니다.
$pull 연산자 기본 문법
db.yourCollectionName.update(
{ '_id': ObjectId("5c6ea036a0c51185aefbd14f") },
{ $pull: { "yourArrayName": { "yourArrayFieldName": yourValue } } },
false,
true
);문법을 이해하기 위해 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테스트 컬렉션 생성
먼저 문서가 포함된 컬렉션을 생성합니다. insertOne() 메서드를 사용하는 쿼리는 다음과 같습니다.
> db.removeObject.insertOne({
... "CustomerName": "Maxwell",
... "CustomerAge": 23,
... "CustomerDetails": [
... {
... "CustomerId": 100,
... "CustomerProduct": "Product-1"
... },
... {
... "CustomerId": 150,
... "CustomerProduct": "Product-2"
... },
... {
... "CustomerId": 200,
... "CustomerProduct": "Product-3"
... }
... ]
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6ea036a0c51185aefbd14f")
}2. 문서 조회로 데이터 확인
find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.
> db.removeObject.find().pretty();
실행 결과는 다음과 같습니다. CustomerDetails 배열 안에 세 개의 객체가 들어있는 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5c6ea036a0c51185aefbd14f"),
"CustomerName" : "Maxwell",
"CustomerAge" : 23,
"CustomerDetails" : [
{
"CustomerId" : 100,
"CustomerProduct" : "Product-1"
},
{
"CustomerId" : 150,
"CustomerProduct" : "Product-2"
},
{
"CustomerId" : 200,
"CustomerProduct" : "Product-3"
}
]
}3. $pull로 배열에서 객체 제거하기
이제 CustomerId가 150인 객체를 배열에서 제거해 보겠습니다. 쿼리는 다음과 같습니다.
> db.removeObject.update(
... { '_id': ObjectId("5c6ea036a0c51185aefbd14f") },
... { $pull: { "CustomerDetails": { "CustomerId": 150 } } },
... false,
... true
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })결과에서 nModified: 1이 반환된 것으로 보아 하나의 문서가 성공적으로 수정되었음을 알 수 있습니다.
update() 파라미터 설명
- 첫 번째 인수: 수정할 문서를 찾기 위한 조건(query)
- 두 번째 인수: 적용할 업데이트 내용($pull 연산자)
- 세 번째 인수(false): upsert 여부 — 일치하는 문서가 없을 때 새 문서를 생성하지 않음
- 네 번째 인수(true): multi 여부 — 조건에 일치하는 모든 문서에 업데이트 적용
4. 삭제 결과 확인
객체가 정상적으로 제거되었는지 다시 문서를 조회해 확인합니다.
> db.removeObject.find().pretty();
출력 결과를 보면 CustomerId가 150이던 객체가 사라지고 두 개의 객체만 남아 있는 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5c6ea036a0c51185aefbd14f"),
"CustomerName" : "Maxwell",
"CustomerAge" : 23,
"CustomerDetails" : [
{
"CustomerId" : 100,
"CustomerProduct" : "Product-1"
},
{
"CustomerId" : 200,
"CustomerProduct" : "Product-3"
}
]
}정리
MongoDB에서 배열 내 객체를 삭제할 때는 $pull 연산자가 가장 간편한 방법입니다. 조건에 맞는 필드 값을 지정하기만 하면 해당 객체가 자동으로 배열에서 제거됩니다. 참고로 최신 버전의 MongoDB에서는 update() 대신 updateOne() 또는 updateMany() 메서드 사용을 권장하고 있으니, 프로젝트 환경에 맞게 선택하여 사용하시기 바랍니다.