3

所以..我正在评估 Mongodb 以管理我的一些 JSON 后端。我对它完全陌生,我遇到了一个在代码中很乱的问题,所以我想 - 哎呀 - 让我看看是否是时候最终开始使用 Mongo

我有一个大约是这样的数据结构:

[
{
    "_id" : ObjectId("526f59ee82f2e293f9833c54"),
    "humans" : [
        {
            "serviceUsers" : [
                {
                    "foo1" : "bar2",
                    "foo2" : "bar3"
                },
                {
                    "foo1" : "baz2",
                    "foo2" : "baz3"
                }
            ]
        }
    ]
}
]

现在我想删除所有“foo1”等于“baz2”的 serviceUsers 数组元素,这样理想情况下我会得到这个:

[
{
    "_id" : ObjectId("526f59ee82f2e293f9833c54"),
    "humans" : [
        {
            "serviceUsers" : [
                {
                    "foo1" : "bar2",
                    "foo2" : "bar3"
                },
            ]
        }
    ]
}
]

我想那$pull是开始的地方。我尝试了一堆扭曲。如果我在收集我的测试,我试过了

db.mytests.update({"humans.serviceUsers.foo1":"baz2"}, {$pull:{"humans.serviceUsers" : {"foo1":"baz2"}}}, {multi: true})

在我天真的眼中,它似乎应该遵循以下$pull语法:

db.collection.update( { field: <query> }, { $pull: { field: <query> } } );

蒙哥没有抱怨。但它也不会以任何方式改变集合。

我也试过

db.mytests.update({}, {$pull:{"humans.serviceUsers" : {"foo1":"baz2"}}}, {multi: true})

这也失败了。

非常感谢任何建议。

4

1 回答 1

6

因此humans也是数组,您应该使用位置 $ 运算符来访问serviceUsers匹配humans元素的数组:

db.mytests.update({ "humans.serviceUsers.foo1" : "baz2" },
                  { $pull: { "humans.$.serviceUsers" : { "foo1": "baz2" }}});
于 2013-10-29T08:16:38.980 回答