也许这是个很受欢迎的问题,但我没有找到解决办法。我有一个包含如下元素的集合:
_id: ObjectId("52821d6c21c495b30a000015")
structure: {
elements: [{
id: "non-unique-id1",
other_data: "value"
subs: [{
id: 1,
field1: "somevalue",
field2: "other value"
}, {
id: 2,
field1: "somevalue",
field2: "other value"
}, {
id: 3,
field1: "somevalue",
field2: "other value"
}]
}, {
id: "non-unique-id2",
subs: [{
id: 1,
field1: "somevalue",
field2: "other value"
}, {
id: 2,
field1: "somevalue",
field2: "other value"
}, {
id: 3,
field1: "somevalue",
field2: "other value"
}]
}]
}现在,如果子数组是id,我想从子数组中删除一个元素。我希望删除发生在所有element字段上。
我尝试了以下方法,但即使没有错误,也不会发生任何事情:
db.objects.update({
"_id" : ObjectId("52821d6c21c495b30a000015")
},{
$pull: {
"structure.elements.subs": {id: 2}
}
})这应该已经用id: 2删除了哈希的2次出现。
也尝试过$pullAll,但是我得到了一个错误:
Modifier $pushAll/pullAll allowed for arrays only关于如何实现我的目标,有什么想法吗?
发布于 2013-12-05 14:29:13
您可以使用$,但查询将只删除1个subs,对于示例中的两个子子,您必须运行两次update。您需要编写一个脚本来迭代您的文档。
db.objects.update({
"_id" : ObjectId("52821d6c21c495b30a000015"),
"structure.elements.subs.id": 2
},{
$pull: {
"structure.elements.$.subs": {"id": 2}
}
});如果您需要临时的管理操作,这是可以的,但是对于应用程序的性能来说太糟糕了
对不起我的英语很差:)
发布于 2013-12-05 13:42:09
Mongo对更新嵌套数组的支持非常弱。您必须在您的elements中分别针对每个$pull数组元素
db.objects.update({
"_id" : ObjectId("52821d6c21c495b30a000015")
},{
$pull: {
"structure.elements.0.subs": {id: 2},
"structure.elements.1.subs": {id: 2}
}
})https://stackoverflow.com/questions/20400211
复制相似问题