我有一个节点"数组的子对象
I have a sub-object of an array of "nodes"
这是我的Mongo文档结构
Here's my Mongo doc structure
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"
"node1.node12" still have object "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"中的所有数据
I lost all data in "node1"
并从"node2.node12"更正提取对象
and correct pull object from "node2.node12"
一些建议
谢谢, 瓦西里
推荐答案不幸的是,您想要执行的操作尚不支持.如果要投票,功能请求票证在这里:
Unfortunately, what you want to do isn't supported yet. The feature request ticket is here if you want to vote it up:
jira.mongodb/browse/SERVER-1243
与此同时,有两种选择:
In the meantime, there are a couple options:
重新设计您的文档.这是用于建模树结构的常见模式的链接: docs. mongodb/manual/tutorial/model-tree-structures/
继续当前的设计并执行多次更新,或者进行查找,修改应用程序中的nodes数组并进行多次更新.请注意,在这种情况下,您将无法在单个文档内进行所有修改.
continue with your current design and perform multiple updates or do a find, modify the nodes array in your application and do a multi update. Be aware that you won't be able to make all modifications within a single document atomically in these scenarios.
更多推荐
在Mongo中$ pull多个对象不起作用
发布评论