我惊讶地发现以下示例代码仅更新单个文档:
> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});
> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});
> db.test.find({"test":"success!"}).count();
1
Run Code Online (Sandbox Code Playgroud)
我知道我可以循环并不断更新,直到它们全部改变,但这似乎非常低效.有没有更好的办法?
我一直在寻找一种方法来创建一个更新语句,该语句将使用现有的数字字段并使用表达式对其进行修改.例如,如果我有一个名为Price的字段,是否可以进行将Price设置为现有值50%的更新?
所以,给定 { Price : 19.99 }
我想做 db.collection.update({tag : "refurb"}, {$set {Price : Price * 0.50 }}, false, true);
可以这样做,还是我必须将值读回客户端,修改,然后更新?我想问题就是可以在更新中使用表达式,并且它们可以引用正在更新的文档.