在Mongo中拉多个对象不起作用

时间:2013-07-20 17:59:31

标签: mongodb pull

我有一个“节点”数组的子对象

这是我的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”

更正拉对象

一些建议

谢谢, 瓦斯利

1 个答案:

答案 0 :(得分:2)

不幸的是,您还不支持您想要做的事情。如果您想要投票,功能请求票据就在这里:

https://jira.mongodb.org/browse/SERVER-1243

与此同时,还有几个选择:

  1. 重新设计您的文档。以下是模型树结构的常见模式链接:http://docs.mongodb.org/manual/tutorial/model-tree-structures/

  2. 继续您当前的设计并执行多项更新或执行查找,修改应用程序中的节点数组并执行多次更新。请注意,在这些情况下,您将无法在单个文档中进行原子修改。