我有一个简单的文档,其中包含现场产品,这是一系列产品。
{
"products" : [
{
"amount" : 0,
"id" : "9647562"
}
],
}
我想删除数量为0的数组中的所有对象。我认为这很简单:
db.shop.update({}, {"$pull": {"products": {"amount": 0} }});
这不起作用,但确实如此:
db.shop.update({}, {"$pull": {"products": {"amount": 2} }});
所以基本上如果我将数字从2更改为0,它就不再起作用了。正如你所看到的数量是整数,我也试图将其作为整数删除,所以情况并非如此。我还能尝试什么?
答案 0 :(得分:1)
试试这个:
db.shop.update({}, {"$pull": {"products": {"amount": 0} }},false,true);
摘自update
文档:
db.collection.update( criteria, objNew, upsert, multi )
所以,这里你应该有upsert = false和multi = true。
原因:您的匹配条件是{}
,这意味着匹配所有,因此更新语句在匹配第一行后退出,并且没有对其执行任何操作,更改所有匹配的行,您需要提供标记{{1}如此真实。
示例:
multi