使用$pull删除MongoDB中的(子)阵列
因此,我正在评估Mongodb是否能够管理我的JSON后端。我对它完全陌生,我有一个问题,就是在代码中做起来很混乱,所以我想-见鬼-让我看看是否是时候开始使用Mongo了 我有一个大致如下的数据结构:使用$pull删除MongoDB中的(子)阵列,mongodb,Mongodb,因此,我正在评估Mongodb是否能够管理我的JSON后端。我对它完全陌生,我有一个问题,就是在代码中做起来很混乱,所以我想-见鬼-让我看看是否是时候开始使用Mongo了 我有一个大致如下的数据结构: [ { "_id" : ObjectId("526f59ee82f2e293f9833c54"), "humans" : [ { "serviceUsers" : [ {
[
{
"_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”:“bazz2”},{$pull:{“humans.serviceUsers”:{“foo1”:“bazz2”}}},{multi:true})
在我公认的天真眼中,它似乎应该遵循$pull
语法:
db.collection.update({field:},{$pull:{field:})代码>
Mongo没有抱怨。但它也不会以任何方式改变收藏
我也试过了
db.mytests.update({},{$pull:{“humans.serviceUsers”:{“foo1”:“baz2”}},{multi:true})
这也失败了
非常感谢您的建议。因此人也属于数组,您应该使用positional$操作符访问匹配的人的数组元素:
db.mytests.update({ "humans.serviceUsers.foo1" : "baz2" },
{ $pull: { "humans.$.serviceUsers" : { "foo1": "baz2" }}});