猫鼬 - 分裂和圆形

时间:2014-11-27 07:24:32

标签: node.js mongodb mongoose

嘿,我的问题很简单,但我无法弄清楚: 我有一个巨大的猫鼬集合player,其字段为money。如何将此值除以100并得到一个整数(无小数)

我试过

players.update({}, {$mul: {'money':.01}}, {multi: true}).exec()

它可以除以100,但我不知道如何围绕它?

顺便说一句,为什么官方mongoose文档中没有关于$mul运算符的文档? http://mongoosejs.com/docs/3.0.x/docs/api.html

谢谢大家

2 个答案:

答案 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}});
})

将其实现为服务器端Javascript函数:

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)
  ...
}