我在Mongodb中有一个$ pull(希望)有小的语法问题。
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, ...]
}
...
]
}
编辑如果有多个嵌入式对象可以包含我要删除的ID ,secondArray
该怎么办firstArrayIds
。换句话说,当我删除对象时,firstdArray
我想删除所有中 secondArray
的引用,而firstArrayIds
不仅仅是第一个匹配项。
您的“ secondArray”具有嵌套的元素结构,因此$
在更新中使用位置运算符时,必须标识要在查询中匹配的外部元素。您基本上需要这样的东西:
bulk.find({
"_id": new mongo.ObjectID(req.session._id),
"secondArray._id": "7423"
}).update({
"$pull": {
"firstArray": { "_id": "153" },
"secondArray.$.firstArrayIds": 153
}
});
因此,实际上,除了常规文档ID外,您还需要随请求传递“两个” ID值。即使是嵌套的,也可以,因为您只在“外部”级别匹配,并且仅在一个数组上匹配。如果您尝试匹配多个数组上的位置,那么位置运算符将无法实现这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句