我有一个看起来像这样的文档:
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"
}
Run Code Online (Sandbox Code Playgroud)
如果我运行查询
db.blog.update({'blogid':1}, { $pull : { 'comments' : {'approved' : 0} } });
Run Code Online (Sandbox Code Playgroud)
然后它将删除第三条评论.
如果相反,我想要将批准为0或1的所有注释拉出来,则以下查询不起作用:
db.blog.update({'blogid':1}, { $pullAll : { 'comments' : {'approved' : [0,1]} } });
Run Code Online (Sandbox Code Playgroud)
我收到了错误
修饰符$ pushAll/pullAll仅允许数组
有人可以解释我哪里出错吗?
谢谢
Vas*_*iuk 15
$pullAll需要完全匹配.您可以$pull改用:
{ $pull : { 'comments' : {'approved' : {$in : [0,1]}} } });
Run Code Online (Sandbox Code Playgroud)
        这是因为 $pullAll 接受数组,而不是对象。我想以下代码应该有效:
{ $pullAll : { 'comments' : [{'approved' : 1}, {'approved' : 0}] } });
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5439 次  |  
        
|   最近记录:  |