我有一个“节点”数组的子对象
这是我的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"
]
}
]
}
“node1.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"
]
}
]
}
我丢失了“node1”中的所有数据
并从“node2.node12”
更正拉对象一些建议
谢谢, 瓦斯利
答案 0 :(得分:2)
不幸的是,您还不支持您想要做的事情。如果您想要投票,功能请求票据就在这里:
https://jira.mongodb.org/browse/SERVER-1243
与此同时,还有几个选择:
重新设计您的文档。以下是模型树结构的常见模式链接:http://docs.mongodb.org/manual/tutorial/model-tree-structures/
继续您当前的设计并执行多项更新或执行查找,修改应用程序中的节点数组并执行多次更新。请注意,在这些情况下,您将无法在单个文档中进行原子修改。