$ inc与Mongoose

时间:2014-02-21 15:17:18

标签: node.js mongodb mongoose

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

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

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

我希望每秒增加'wood'一定数量的'woodPerHour'/ 3600。问题是使用$ inc,我无法根据架构值添加数量。这就是它现在的样子(我正在加1测试)。

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

有一种聪明的方法可以做到这一点,或者我必须进行查找({}),然后进行每次操作?

感谢。

2 个答案:

答案 0 :(得分:0)

如你所说,没有办法使用更新。你需要通过简单的迭代来做到这一点。

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");
    }
})

答案 1 :(得分:0)

我认为你需要使用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();
    }    
});