3

我只想使用 pullAll 从 mongoDB 的数组中删除几个对象

db.collection.update({'_id': ObjectId(".....")}, { $pullAll : { 'notifications' : [{'type' : type}, {'id': id}]} })

为什么这不起作用?什么是正确的语法?

更新:

该文件是:

{
    "_id" : ObjectId("......"),
    "notifications" : [ { "type" : "aaa",
                          "id" : "123" },
                        { "type" : "bbb",
                          "id" : "123" },
                        { "type" : "ccc",
                          "id" : "234" }]
}
4

2 回答 2

2

您的问题可能是两个地方之一:

首先,您的更新存在语法问题:

db.collection.update({'_id': ObjectId(".....")}, 
     { $pullAll : 
         { 'notifications' : [{'type' : type}, {'id': id}]
         } 
     }
)

应该:

db.collection.update({'_id': ObjectId(".....")}, 
     { $pullAll : 
         { 'notifications' : [{'type' : type, 'id': id}]
         }  
     }
)

请注意,我将}, {type 和 id 删除并加入到单个 JSON 子文档中。

另一个问题是您的数组元素似乎具有id形式为“123”的字符串的值-您确定将字符串传递给更新语句吗?字符串“123”不等于整数 123。

于 2012-11-19T18:40:49.040 回答
0

要使用$pullAll,您需要完全匹配整个对象。为什么不直接使用$pull,我相信它会满足您的需求

于 2012-11-19T17:51:16.667 回答