我有一个具有以下结构(简化)的文档:
{
"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/