我一直在寻找一种方法来创建更新语句,该语句将采用现有的数字字段并使用表达式对其进行修改。例如,如果我有一个名为 Price 的字段,是否可以进行更新,将 Price 设置为现有值的 50%?
所以,给定 { Price : 19.99 }
我想做 db.collection.update({tag : "refurb"}, {$set {Price : Price * 0.50 }}, false, true);
可以这样做还是我必须将值读回客户端,修改,然后更新?我想问题是可以在更新中使用表达式,它们是否可以引用正在更新的文档。
最佳答案
您可以使用 db.eval()
运行服务器端代码。
db.eval(function() {
db.collection.find({tag : "refurb"}).forEach(function(e) {
e.Price = e.Price * 0.5;
db.collection.save(e);
});
});
注意这会阻塞DB,所以最好做find-update操作对。
见 https://docs.mongodb.com/manual/core/server-side-javascript/
https://stackoverflow.com/questions/8342725/