我有一个看起来像这样的文件:
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允许 仅限数组
有人可以解释我哪里出错吗?
谢谢
答案 0 :(得分:15)
$pullAll
需要完全匹配。您可以改为使用$pull
:
{ $pull : { 'comments' : {'approved' : {$in : [0,1]}} } });
答案 1 :(得分:4)
这是因为$ pullAll需要数组,而不是对象。我猜以下代码应该有效:
{ $pullAll : { 'comments' : [{'approved' : 1}, {'approved' : 0}] } });