我正在遍历一个ID列表,查找与该ID关联的条目,并且我想根据其当前值更新一个“得分”值。像这样:

id_array= ['2l3k4jixc','2343xjl','l243xkj33',.......];
var K=5;
for (var i=0, i<id_array.length;i++){
Model.findByIdAndUpdate(id_array[i], { $set: { value:update_variable }}, options, function(err,found_item){
    update_variable= ((K-found_item.score)^3)/2;
}
})


现在,它正在尝试使用$set: {score:update_variable}在回调函数定义了update_variable之前。所以我认为这行不通。我怎样才能做到这一点?

最佳答案

目前,在MongoDB中,通常无法在任何形式的update语句中引用另一个字段值,因此通常会陷入“查找”项目,然后发出单独的.save()方法的麻烦:

Model.findById(id_array[i],function(err,found) {
    found.value = ((doc.score)^3)/2;
    found.save();
});


保存中的其他回调对于您的目的是可选的(建议使用),但这是当前基于另一个值设置一个字段的唯一方法。因此,除非循环,否则立即进行批量更新。

关于javascript - Mongoose :如何在回调中使用变量来更新文档?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23644932/

10-13 21:44