2
我有「節點」
這裏是我的Mongo的文檔結構
db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
{ nodeid : "node11"
sku : [
"aaa",
"bbb",
"ccc"]
},
{ nodeid : "node12"
sku : [
"bbb",
"ddd"]
}]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"bbb",
"ddd"]
}]
}
我使用數組的子對象:
db.nodes.update({'nodes.sku': 'bbb'},{$pull: {'nodes.$.sku':'bbb'}}, {multi: 1})
有結果:
db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
{ nodeid : "node11"
sku : [
"aaa",
"ccc"
]
},
{ nodeid : "node12"
sku : [
"bbb",
"ddd",
]
}
]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"ddd"
]
}
]
}
「node 1.node12" 仍然有對象 「BBB」
我嘗試使用:
db.nodes.update({'nodes': {$elemMatch: {'sku':'bbb'}}},{$pull: { nodes: {'sku':'bbb'}}}, {multi: 1})
,並有結果:
db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"ddd"
]
}
]
}
我失去了所有數據 「節點1」
和正確從「node2.node12」拉對象
一些建議
謝謝, Vassili
'$'僅代表_first_匹配數組元素的索引,因此您不能使用它來更新多個元素。 – JohnnyHK
似乎,它重複http://stackoverflow.com/questions/5228210/how-to-remove-an-element-from-a-doubly-nested-array-in-a-mongodb-document – sneawo