【问题标题】:Mongoose save() method not updating mongoMongoose save() 方法不更新 mongo
【发布时间】:2014-10-27 02:17:45
【问题描述】:

我的猫鼬收藏如下所示:

集合名称:测试

[
{
 _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();}
         }
      }
  }    

在脚本结束时,当我检查集合时,值没有更新。 有什么我可能在这里遗漏的线索吗?

谢谢,

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    在上面的源代码中,您永远不会更新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

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

    【讨论】:

    • 嗨@runtimeZero,如果这个答案解决了你的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己赢得了一些声誉。
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多