Mongoose save()方法不更新mongo

Mongoose save()方法不更新mongo,mongoose,Mongoose,我的猫鼬系列如下所示: 集合名称:test [ { _id: xxx, alerts: { level1 : { list: [ {'name': 'John'},{'name':'balm'] } } }, { _id: yyy, alerts: { level1 : { list: [ {'name

我的猫鼬系列如下所示:

集合名称: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();}
         }
      }
  }    
在脚本结束时,当我检查集合时,值不会更新。 有什么线索可以帮我找到吗


谢谢,

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

doc.save()
方法使用回调也是一种良好的做法:

doc.save(function (err, doc, numberAffected) {
  if (err) {
    return handleError(err);
  }
});
因此,您可以处理保存文档时发生的任何错误。看


您还应该检查传递给find函数的
查询
。也许你找不到任何文件,以便<代码> DOCs<代码>参数是空的。

Hy@ RunTimeN0如果这个答案已经解决了你的问题,请点击检查标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。