使用 MongoDB $Pull 刪除陣列中的文件
Shihab Sikder
2023年1月30日
$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 ]
},
現在,你要刪除 price
陣列中值大於 50 的元素。然後命令將如下所示。
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 } ]
}
]
}
] )
我們想從 results
陣列中刪除那些 q
等於 2 且 a
大於等於 8 的專案。然後查詢將是:
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
運算子的更多資訊。
作者: Shihab Sikder