2014-09-02 140 views
-1

我的貓鼬集看起來像下面的東西:貓鼬save()方法不更新蒙戈

集名稱:測試

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

] 

我寫一個函數,會發現所有「約翰」在名稱字段列表並用'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();} 
     } 
     } 
    }  

在腳本結束時我檢查的收集,沒有更新的值。 任何線索我可能在這裏失蹤?

謝謝,

回答

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參數爲空。

+0

嗨@runtimeZero如果此答案已解決您的問題,請點擊該複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。 – DevDig 2016-11-11 15:28:47