我在Mongodb中有一个(希望)小的语法问题。
bulk.find({_id: new mongo.ObjectID(req.session._id)}).updateOne({$pull: {
firstArray: {id: req.params.id},
'secondArray.firstArrayIds': req.params.id
'secondArray.$.firstArrayIds': req.params.id
}});
firstArray $pull
效果很好。
但是secondArray.firstArrayIds和/或secondArray。$。firstArrayIds没有。我在这做错了什么?
这是我的数据结构:
clients: {
firstArray: [
{
_id: '153'.
someField1: 'someVal1',
}
...
]
secondArray: [
{
_id: '7423'.
someField1: 'someVal1',
firstArrayIds: [153, 154, 155, ...]
}
...
]
}
编辑如果secondArray
中有多个嵌入对象firstArrayIds
可以包含我要删除的ID,该怎么办?换句话说,当删除firstdArray
中的对象时,我想删除所有 secondArray
firstArrayIds
中的引用不仅仅是第一个匹配项。
答案 0 :(得分:2)
你的" secondArray"具有嵌套元素结构,因此在更新中使用位置$
运算符时,必须标识要在查询中匹配的外部元素。你基本上需要这样的东西:
bulk.find({
"_id": new mongo.ObjectID(req.session._id),
"secondArray._id": "7423"
}).update({
"$pull": {
"firstArray": { "_id": "153" },
"secondArray.$.firstArrayIds": 153
}
});
事实上,实际上有"两个"除了常规文档ID之外,您需要传入请求的ID值。即使这是嵌套的,也可以,因为你只匹配"外部"级别,仅在一个阵列上。如果您尝试匹配多个阵列上的位置,则位置运算符无法实现此目的。