试试这个 :
db.shop.update({}, {"$pull": {"products": {"amount": 0} }},false,true);
文档摘录update
:
db.collection.update( criteria, objNew, upsert, multi )
所以,在这里你应该有 upsert = false 和 multi = true。原因:您的匹配条件{}
意味着全部匹配,因此更新语句在匹配第一行后退出,并且不对其执行任何操作,要更改所有匹配行,您需要将标志提供multi
为 true。
例子:
> db.newColl.find()
{ "_id" : ObjectId("500d262db869eab21b7fc6b0"), "products" : [ ] }
{ "_id" : ObjectId("500d2632b869eab21b7fc6b1"), "products" : [ { "amount" : 5, "id" : "9647562" } ] }
>
>
> db.newColl.update({},{"$pull": {"products": {"amount": 5 } }});
> db.newColl.find()
{ "_id" : ObjectId("500d262db869eab21b7fc6b0"), "products" : [ ] }
{ "_id" : ObjectId("500d2632b869eab21b7fc6b1"), "products" : [ { "amount" : 5, "id" : "9647562" } ] }
>
>
> db.newColl.update({},{"$pull": {"products": {"amount": 5 } }},false,true);
> db.newColl.find()
{ "_id" : ObjectId("500d2622b869eab21b7fc6ae"), "products" : [ ] }
{ "_id" : ObjectId("500d2632b869eab21b7fc6b1"), "products" : [ ] }