嘿,我的问题很简单,但我无法弄清楚:
我有一个巨大的猫鼬集合player
,其字段为money
。如何将此值除以100并得到一个整数(无小数)
我试过
players.update({}, {$mul: {'money':.01}}, {multi: true}).exec()
它可以除以100,但我不知道如何围绕它?
顺便说一句,为什么官方mongoose文档中没有关于$mul
运算符的文档?
http://mongoosejs.com/docs/3.0.x/docs/api.html
谢谢大家
答案 0 :(得分:1)
目前,MongoDb没有任何内置运营商来支持Math.ceil()
或Math.floor()
功能。您需要在应用程序服务器上执行此操作,或者编写驻留在数据库服务器上的javascript函数并执行相同的操作。
Players.find().forEach(function(doc){
var updated = Math.ceil(doc.money/100);
Players.update({"_id":doc._id},{$set:{"money":updated}});
})
db.system.js.insert({"_id":"updateMoney","value":function(num){
db.players.find().forEach(function(doc){
var updated = Math.ceil(doc.money/num);
db.players.update({"_id":doc._id},{$set:{"money":updated}});
})
}})
并从mongoose调用该函数:
mongoose.connection.on("open", function(err){
mongoose.connection.db.eval("updateMoney(100)", function (err, retval) {
console.log('err: '+err);
console.log('retval: '+retval);
});
});
$mul是一个mongoDB运算符,mongoose是一个API,它允许我们使用这些运算符来查询mongodb。
答案 1 :(得分:0)
对于Mongoose 4和4+版本,您可以使用getter和setter。所以转到播放器模式
将set: v => Math.round(v)
添加到您的钱字段。
喜欢
money: {
type: Number,
set: v => Math.round(v)
...
}