mongodb - 在MongoDB中将字段乘以值

我一直在寻找一种方法来创建更新语句,该语句将采用现有的数字字段并使用表达式对其进行修改。例如,如果我有一个名为 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/

相关文章:

.net - MongoDB事务?

node.js - 在 Mongoose 中创建外键关系

mongodb - 如何使用 docker-compose 在 mongodb 中创建用户

mongodb - 如何将 MongoDB 副本集转换为独立服务器

javascript - 使用 IntelliJ IDEA for JavaScript 的最佳插件

node.js - 在MongoDB中更新和返回文档

mongodb - MongoDb 2.2、2.4 和 2.6 中的 Map-Reduce 性能

database - findOneAndUpdate 和 update 的 Mongoose 区别

mongodb - 是否可以从集合中 mongodump 转储最后的 "x"记录?

mongodb - Meteor.Collection.ObjectID() 与 MongoDB O