困惑于$ pullAll如何在MongoDB中运行

时间:2011-05-04 23:07:58

标签: mongodb

我有一个看起来像这样的文件:

db.blog.findOne()
{
        "_id" : ObjectId("4dc1c938c4bfb4d21a000001"),
        "blogid" : 1,
        "body" : "Lorem ipsum dolor",
        "comments" : [
                {
                        "id" : 1,
                        "name" : "Alex",
                        "comment" : "Test",
                        "approved" : 1
                },
                {
                        "id" : 2,
                        "name" : "Phil",
                        "comment" : "Test",
                        "approved" : 1
                },
                {
                        "id" : 3,
                        "name" : "Joe",
                        "comment" : "Test",
                        "approved" : 0
                }
        ],
        "no_comments" : 11,
        "title" : "Hello world"
}

如果我运行查询

db.blog.update({'blogid':1}, { $pull : { 'comments' : {'approved' : 0} } });

然后它将删除第三条评论。

如果我想将所有批准的评论为0或1,则以下查询不起作用:

db.blog.update({'blogid':1}, { $pullAll : { 'comments' : {'approved' : [0,1]} } });

我收到错误

  

修改符$ pushAll / pullAll允许   仅限数组

有人可以解释我哪里出错吗?

谢谢

2 个答案:

答案 0 :(得分:15)

$pullAll需要完全匹配。您可以改为使用$pull

{ $pull : { 'comments' : {'approved' : {$in : [0,1]}} } });

答案 1 :(得分:4)

这是因为$ pullAll需要数组,而不是对象。我猜以下代码应该有效:

{ $pullAll : { 'comments' : [{'approved' : 1}, {'approved' : 0}] } });