【问题标题】:$inc with Mongoose$inc 与猫鼬
【发布时间】:2014-02-21 23:28:37
【问题描述】:

首先,我想为我糟糕的英语道歉。

我有一个如下所示的架构:

var playerSchema = new Schema({
    name: { type: String, required: true, trim: true, index: { unique: true } },
    wood: { type: Number, required: true, default: 500 },
    woodPerHour: { type: Number, required: true, default: 3600 }
});

我想每秒将 'woodPerHour'/3600 的数量增加到 'wood'。问题是使用 $inc,我无法添加基于模式值的数量。这就是它现在的样子(我加 1 进行测试)。

playerModel.update({}, {$inc:{wood:1}}, function(err){
        if(err) console.log("error al update: " + err);
    });

有一种聪明的方法可以做到这一点,或者我必须先执行 find({}) 然后 forEach?

谢谢。

【问题讨论】:

  • 首先欢迎来到 Stack Overflow!其次,这个网站的主要目的是帮助你在遇到困难无法克服时克服编程问题。要获得高质量的答案,请务必发布您尝试过的内容、当前获得的结果以及期望的结果。请务必包含所有这些以获得最佳答案。

标签: node.js mongodb mongoose


【解决方案1】:

我认为你需要使用 find({}): 例如。

playerModel.find({}, function(err,records){
    if(err) console.log("error trying to update ");
    for(var i in records) {
       records[i].wood++; // Or some calc
       records[i].save();
    }    
});

【讨论】:

    【解决方案2】:

    没有办法像你说的那样使用更新。您需要通过简单的迭代来做到这一点。

    playerModel.find({}, function(err, data) {
        if (!err) {
            data.wood = data + data.woodPerHour/3600; //update as you want
            data.save(function(err) {
                if (err) {
                    console.log("Error occured while updating doc: " + data._id);
                } else {
                    console.log("Doc updated: " + data._id);
                }
            })
        } else {
            console.log("Error occured while iterationg");
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2021-09-25
      • 2019-02-09
      • 2018-07-15
      • 2014-10-16
      相关资源
      最近更新 更多