Mongoose save()方法不更新mongo

时间:2014-09-02 18:17:30

标签: mongoose

我的mongoose集合如下所示:

集合名称:test

[
{
 _id: xxx,
 alerts: { 
          level1 : {
                      list: [ {'name': 'John'},{'name':'balm']
                    }
        }
},
{
 _id: yyy,
 alerts: { 
          level1 : {
                      list: [ {'name': 'cindy'},{'name':'terry']
                    }
        }
},

]

我正在编写一个函数,它将在列表的名称字段中找到所有'Johns',并将其替换为'Joan'。

到目前为止,我有以下脚本:

    var mongoose = require('mongoose'),
        ,testModel = mongoose.model('test');

    testModel.find(query, function(err,docs){
     docs.forEach(function(doc){
        if(doc.alerts.level1.list.length>0) {
            var nameChagned = false;
            doc.alerts.level1.list.forEach(function(obj){
                 if(obj.name === 'John') { 
                    obj.name = 'Joan'; 
                     namechanged = true;
                 }
             }
            if(nameChanged) { doc.save();}
         }
      }
  }    

在检查集合时脚本结束时,值不会更新。 我可以在这里找到什么线索?

谢谢,

1 个答案:

答案 0 :(得分:0)

在上面的源代码中,您永远不会更新nameChanged变量,因此永远不会运行doc.save()命令。您将在行namechanged = true中引入一个全局变量(请注意,JavaScript变量区分大小写)。在声明中,您使用变量名nameChagned,因此nameChanged变量始终计算为假值。

doc.save()方法使用回调也是一种好习惯:

doc.save(function (err, doc, numberAffected) {
  if (err) {
    return handleError(err);
  }
});

因此,您可以处理保存文档时发生的任何错误。请参阅Mongoose Docs for Model#save

您还应该检查要传递给查找功能的query。也许您没有找到任何文档,因此docs参数为空。