我有一个像这样的嵌套数组
{
"_id": "5dff75968102f11e20ae888e",
"docID": "Employees",
"data": [
[
"234768237",
"Value1",
],
[
"234768238",
"Value2"
],
[
"234768239",
"Value3"
]
]
}
在嵌套数据数组中,第一个元素是员工ID,例如:234768237。 我想传递一个员工ID数组并删除匹配的ID,例如:[234768237,234768238]
到目前为止我尝试过的事情
let employeeIDArray = [234768237, 234768238];
collection.updateOne(
{ docID: "Employees" },
{
$pull: {
"data.$[]": { "0": { $each: employeeIDArray } }
}
}
);
答案 0 :(得分:2)
您将关闭,请尝试:
let employeeIDArray = [234768237, 234768238];
collection.updateOne(
{ docID: "Employees" },
{
$pull: {
"data": { $in: employeeIDArray }
}
}
);
$each
修饰符仅适用于$push
和$addToSet
动作,请详细了解here。
编辑:
对于嵌套数组,请像这样使用$pullAll而不是$pull
collection.updateOne(
{ docID: "Employees" },
{
$pullAll: {
"data.$[]": employeeIDArray
}
});
答案 1 :(得分:0)
如果您使用的是MongoDB的最新版本,则可以使用以下查询通过聚合管道进行更新:
collection.updateOne(
{ docId: "Employees" },
[ {
$set: {
data: {
$filter: {
input: "$data",
cond: { $in: [ { $arrayElemAt: [ "$$this", 0 ] }, [ "234768237", "234768238" ] ] } }
}
}
} ],
{ upsert: true }
)