MongoDB $Pull을 사용하여 배열 내 문서 삭제
$pull
연산자는 배열에서 기존 항목을 가져올 수 있습니다. 배열에서 하나 이상의 요소를 가져올 수 있습니다.
중첩 배열에서 특정 개체를 삭제할 수 있습니다.
MongoDB $pull
연산자
$pull
은 MongoDB에서 배열에서 기존 요소를 제거하는 데 사용됩니다. $pull
은 update
쿼리와 함께 사용됩니다.
여기 예가 있습니다. 다음을 삽입했습니다.
db.cart.insertMany( [
{
_id: 1,
grocery:["biscuits", "oil", "honey", "milk", "paper"],
electronics:["earphone", "bluetooth", "mouse", "keyboard"]
},
{
_id: 2,
grocery:["biscuits", "oil", "soda", "water", "paper"],
electronics:["pendrive", "motherboard", "mouse", "SSD"]
}
] )
여기 두 개의 장바구니가 있습니다. 상점에 paper
, SSD
또는 mouse
에 대한 재고가 없다고 가정해 보겠습니다.
따라서 장바구니에서 이러한 제품을 제거하려고 합니다. 그런 다음 $pull
연산자를 사용하여 다음 쿼리를 사용할 수 있습니다.
db.cart.updateMany({},
{
$pull:{ grocery: "paper", electronics:{ $in:[ "SSD","mouse" ] } }
}
)
$in
연산자는 각 요소를 문서와 일치시키기 위해 배열을 사용합니다. 이 작업 후 컬렉션은 다음과 같습니다.
{
_id: 1,
grocery:["biscuits", "oil", "honey", "milk"],
electronics:["earphone", "bluetooth", "keyboard"]
},
{
_id: 2,
grocery:["biscuits", "oil", "soda", "water"],
electronics:["pendrive", "motherboard"]
}
조건이 있는 MongoDB $pull
명령
다음 문서가 있다고 가정해 보겠습니다.
{
_id: 1,
price: [ 31, 50, 55, 66, 98, 25 ]
},
{
_id: 2,
price: [ 51, 55, 65, 91, 19, 26 ]
},
이제 값이 50보다 큰 price
배열의 요소를 제거하려고 합니다. 그러면 명령은 다음과 같습니다.
db.products.updateMany(
{},
{ $pull: { price:{ $gte : 50} } }
)
updateMany
의 첫 번째 매개변수로 {}
를 사용했음을 알 수 있습니다. 모든 요소를 업데이트하고 싶기 때문입니다.
특정 _id
만 업데이트하려는 경우 명령은 다음과 같습니다.
db.products.updateMany(
{_id: 1},
{ $pull: { price:{ $gte : 50} } }
)
_id
에서 $in
연산자를 사용하여 여러 _id
를 선택하여 업데이트하고 pull
작업을 사용할 수도 있습니다.
중첩 배열에서 $pull
사용
다음과 같은 문서 모음이 있다고 가정해 보겠습니다.
db.survey.drop()
db.survey.insertMany( [
{
_id: 1,
results: [
{
item: "A",
score: 5,
answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
},
{
item: "B",
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ]
}
]
},
{
_id: 2,
results: [
{
item: "C",
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
},
{
item: "B",
score: 4,
answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ]
}
]
}
] )
q
가 2이고 a
가 8보다 큰 results
배열에서 해당 항목을 제거하려고 합니다. 그러면 쿼리는 다음과 같습니다.
db.survey.updateMany(
{ },
{
$pull:
{
results:
{
answers: { $elemMatch: { q: 2, a: { $gte: 8 } } }
}
}
}
)
이 작업 후 업데이트된 컬렉션은 다음과 같습니다.
{
_id: 1,
results: [
{
item: 'A',
score: 5,
answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
}
]
},
{
_id: 2,
results: [
{
item: 'C',
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
}
]
}
이 중첩 배열 예제는 MongoDB의 공식 문서에서 가져왔습니다. 여기 전체 문서를 읽고 $pull
연산자에 대해 자세히 알아볼 수 있습니다.