在Mongo中$ pull多个对象不起作用 [英] $pull multiple object in Mongo does not work

查看:213
本文介绍了在Mongo中$ pull多个对象不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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:

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

与此同时,有两种选择:

In the meantime, there are a couple options:

  1. 重新设计您的文档.这是用于建模树结构的常见模式的链接: http://docs. mongodb.org/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多个对象不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆