我想從我的 mongoDB 集合中的二維陣列中洗掉一個陣列。我的架構看起來像:
{
"_id" : ObjectId("6218e63e4f9e4efbb05de2bf"),
"name" : "Toyota",
"rate" : 50,
"fine" : 5,
"datesBooked" : [
[
"2022-02-08",
"2022-02-14"
],
[
"2022-02-16",
"2022-02-18"
],
[
"2022-02-20",
"2022-02-22"
],
[
"2022-02-24",
"2022-02-25"
],
[
"2022-03-01",
"2022-03-02"
],
[
"2022-03-01",
"2022-03-02"
]
],
"__v" : 0
}
我想找到一個具有特定 _id 的物件并從 datesBooked 2d 陣列中洗掉一個特定元素。我嘗試使用 $pull 函式,但我無法正確使用它。有人可以告訴我我應該怎么做!我正在使用 express 和 javascript 來執行此操作。還有,我是菜鳥。已經感謝感謝!
uj5u.com熱心網友回復:
這是如何通過 $pull 從 datesBooked 陣列中的第二個陣列中洗掉特定元素的方法:
var myVariable="2022-02-14"
db.collection.update({ "_id": ObjectId("6218e63e4f9e4efbb05de2bf") },
{
"$pull": {
"datesBooked.$[]": myVariable
}
})
解釋:您需要使用所有位置運算子 $[](自 mongodb v3.6 起可用)為 $pull 操作提供第二個陣列,以便它洗掉具有確切值的陣列元素,在示例中這是值“2022 -02-14"
操場
如果您需要從第一個陣列中洗掉帶有 [var1,var2] 的元素,您需要像這樣使用 $pull :
db.collection.update({
"_id": ObjectId("6218e63e4f9e4efbb05de2bf")
},
{
"$pull": {
"datesBooked": [
"2022-02-08",
"2022-02-14"
]
}
})
解釋:從第一個陣列中拉出陣列元素
操場
uj5u.com熱心網友回復:
在 Mongodb v4.2 中,您可以使用流水線更新來實作這一點,如下所示:
db.collection.updateOne(
{ _id: id },
[
{
$set: {
datesBooked: {
$concatArrays: [
{
$slice: [
"$datesBooked",
index
]
},
{
$slice: [
"$datesBooked",
index 1,
{
$size: "$datesBooked"
}
]
}
]
}
}
}
])
蒙戈游樂場
對于舊版本,這不能在 1 次通話中完成,您需要將其拆分為 2 次單獨的通話。
- - - - - - - - - - - - - 編輯 - - - - - - - - - - - - -------- 下面是使用變數的方法:
const var1 = "2022-02-20";
const var2 = "2022-02-22";
db.collection.updateOne(
{ _id: id },
[
{
$set: {
datesBooked: {
$filter: {
input: "$datesBooked",
cond: {
$and: [
{
$ne: [
{
$arrayElemAt: [
"$$this",
0
]
},
var1
]
},
{
$ne: [
{
$arrayElemAt: [
"$$this",
1
]
},
var2
]
}
]
}
}
}
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433608.html
