node.js - MongoDB 更新 $pull 多个数组中的文档

标签 node.js mongodb

我有一个具有以下结构(简化)的文档:

{
    "containers": [
    {
        "containerId": 1,
        "components": ["component1", "component2"]
    },
    {
        "containerId": 2,
        "components": ["component3", "component1"]
    }]
}

如何编写一个查询来从两个容器中删除“component1”?这可能吗?

到目前为止,我已经尝试过 {"$pullAll": { "containers.$.component": ["component1"]}} ,类似的查询 $pull ,设置multi: true但我总是最终只从第一个数组中删除组件(我正在使用 .update() )

编辑:原始数据!

{
    "_id" : ObjectId("53a056cebe56154c99dc950b"),
    "_embedded" : {
        "click" : {
            "items" : [],
            "_links" : {
                "self" : {
                    "href" : "http://localhost/v1/click"
                }
            }
        },
        "container" : {
            "_links" : {
                "self" : {
                    "href" : "http://localhost/v1/container"
                }
            },
            "items" : [ 
                {
                    "name" : "Container test",
                    "uriName" : "Container_test",
                    "description" : "this is a test container",
                    "containerId" : "CONTAINER TEST+SITE_TEST",
                    "component" : [ 
                        "ANOTHER COMPONENT+SITE_TEST", 
                        "ANOTHER COMPONENT+SITE_TEST", 
                        "SARASA+SITE_TEST"
                    ],
                    "_links" : {
                        "self" : {
                            "href" : "http://localhost/v1/container/CONTAINER TEST+SITE_TEST"
                        }
                    }
                }, 
                {
                    "name" : "sasasa",
                    "uriName" : "sasasa",
                    "description" : "container description",
                    "containerId" : "SASASA+SITE_TEST",
                    "component" : [ 
                        "ANOTHER COMPONENT+SITE_TEST", 
                        "COMPONENT+SITE_TEST", 
                        "FAFAFA+SITE_TEST", 
                        "SARASA+SITE_TEST"
                    ],
                    "_links" : {
                        "self" : {
                            "href" : "/v1/container/SASASA+SITE_TEST"
                        }
                    }
                }
            ]
        }
    },
    "name" : "SITE_TEST",
    "siteId" : "SITE_TEST",
    "url" : "/v1/site"
}

好的,所以我要做的就是从两个容器中删除组件“SARASA+SITE_TEST”。我正在使用 robomongo 来测试查询。我试过db.site.update({"_embedded.container.items.component": "SARASA+SITE_TEST"},{"$pullAll": { "_embedded.container.items.component": ["SARASA+SITE_TEST"]}}, {multi: true})它不起作用,之前我尝试过 db.site.update({"_embedded.container.items.component": "SARASA+SITE_TEST"},{"$pull": { "_embedded.container.items.$.component": "SARASA+SITE_TEST"}}, {"multi": true})它也不起作用。我假设 robomongo 直接公开 mongo 驱动程序,我没有尝试从命令行运行它。

(该文档是一个“站点”,这就是我的查询以 db.site 开头的原因)

最佳答案

我遇到了类似的问题,我尝试了 $pullAll 并且成功了。

https://docs.mongodb.org/manual/reference/operator/update/pullAll/

关于node.js - MongoDB 更新 $pull 多个数组中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367494/

相关文章:

node.js - child 家务模式的数据库设计

javascript - Expressjs Mongoose 查找嵌套嵌入文档未定义

node.js - Socket.io 刷新时断开连接?

javascript - 如何访问 JSON 中的数组并在 Jade 中迭代

MongoDB $or/$and 命令优化

node.js - Bitnami MEAN 堆栈无法连接到本地 mongoDb

ruby-on-rails - 我正在 Linux 上使用 Ruby on Rails、mongoDB、JSON 开发一个网站。 Windows/Mac 用户是否会遇到任何基于平台的问题?

javascript - 连接到远程 SSH 服务器(通过 Node.js/html5 控制台)

javascript - 使用循环的快速动态渲染将不起作用

javascript - 在 map 实例上使用 map /过滤器行为