【问题标题】:$pull multiple object in Mongo does not workMongo 中的 $pull 多个对象不起作用
【发布时间】:2013-07-19 20:38:21
【问题描述】:

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

这是我的 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”中正确拉取对象

一些建议

谢谢, 瓦西里

【问题讨论】:

标签: mongodb pull


【解决方案1】:

很遗憾,尚不支持您想要执行的操作。如果您想投票,功能请求票就在这里:

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

与此同时,有几个选择:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2019-01-28
    • 2017-03-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多