我(希望)在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, ...]
}
...
]
}编辑,如果secondArray中有多个嵌入对象,firstArrayIds可以包含要删除的id,怎么办?换句话说,在删除firstdArray中的对象时,我希望删除all secondArray's firstArrayIds中的引用,而不仅仅是第一次匹配。
发布于 2014-10-03 04:52:31
您的"secondArray“具有嵌套的元素结构,因此在更新中使用位置$运算符时,必须标识查询中要匹配的外部元素。你基本上需要这样的东西:
bulk.find({
"_id": new mongo.ObjectID(req.session._id),
"secondArray._id": "7423"
}).update({
"$pull": {
"firstArray": { "_id": "153" },
"secondArray.$.firstArrayIds": 153
}
});因此,除了一般文档id之外,实际上还有“两个”id值需要与请求一起传递。尽管这是嵌套的,但这是可以的,因为您只在“外部”级别上进行匹配,并且只在一个数组上匹配。如果您试图匹配多个数组上的位置,那么使用位置运算符是不可能的。
https://stackoverflow.com/questions/26165650
复制相似问题