我正在尝试$pull
从嵌入的数组中删除 () 对象。(使用 javascript/node.js 驱动程序。)
这是样本数据,其中一、二、三是级别:
{
one : "All",
one : [
{
name: "People",
two: [
{
three_id: 123,
three: "Jonny",
},
{
three_id: 456,
three: "Bobby",
}
]
},
{
name: "Animals",
two: [
{
three_id: 828,
three: "Cat",
},
{
three_id: 282,
three: "Dog",
}
]
}
]
}
在这个例子中,我试图摆脱“鲍比”。
如果需要,我可以在“三级”成功匹配文档,如下所示:
db.test.find({"one.two.three_id" : 456});
但是,我不知道如何使用update
. 以下是一些尝试,但都不起作用:
// failed attempts
db.test.update({"one.two.three_id" : 456}, {$pull:{'one.$.two.$.three_id': 456}});
db.test.update({"one.two.three_id" : 456}, {$pull:{'three_id': 456}});
// deletes entire level two "People"
db.test.update({"one.two.three_id" : 456}, {$pull: {one: {two : {$elemMatch: {'three_id': 456}}}}});
我读到您不能使用两个位置$ operators
,并且您必须知道第二个位置的索引位置。但是,我想避免使用要删除的嵌入式字典的索引。
参考:MongoDB on pull
http://docs.mongodb.org/manual/reference/operator/update/pull/