所以..我正在评估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
是开始的地方。我尝试了一堆扭曲。如果我在收集mytests,我试过
db.mytests.update({"humans.serviceUsers.foo1":"baz2"}, {$pull:{"humans.serviceUsers" : {"foo1":"baz2"}}}, {multi: true})
对于我公认的天真的眼睛,似乎它应该遵循$pull
语法:
db.collection.update( { field: <query> }, { $pull: { field: <query> } } );
Mongo不抱怨。但它也不会以任何方式改变集合。
我也试过
db.mytests.update({}, {$pull:{"humans.serviceUsers" : {"foo1":"baz2"}}}, {multi: true})
哪个也失败了。
非常感谢任何建议。
答案 0 :(得分:3)
因此humans
也是数组,您应该使用位置$运算符来访问匹配的serviceUsers
元素的humans
数组:
db.mytests.update({ "humans.serviceUsers.foo1" : "baz2" },
{ $pull: { "humans.$.serviceUsers" : { "foo1": "baz2" }}});