2014-12-05 45 views
0

我想通過一個文檔遍歷我的更新功能時迭代通過MongoDB的條目的JavaScript節點

User.prototype.update = function(user, done){ 
    this.model.findOne({_id:user._id}, function(err, doc){ 
     console.log(doc); 
     for(var i in doc){ 
      if(user[i] != undefined && user[i] != doc[i]){ 
       console.log('this value', i, user[i], user[i] === doc[i], doc[i]); 
       doc[i] = user[i]; 
      } 
     } 
     console.log(doc[i]); 
     //doc.save(done); 
    }); 
} 

但是這樣捕獲所有,該模型已添加到對象如_save,_done,_events功能,以及許多其他我不關心檢查的領域。

我也嘗試添加一個if(user.hasOwnProperty(i)),但不起作用。

UPDATE:這工作很漂亮,如果有人看到一個更好的方式去了解它讓我知道

User.prototype.update = function(user, done){ 
    this.model.findOne({_id:user._id}, function(err, doc){ 
     for(var i in doc._doc){ 
      if(user[i] && user[i] != doc[i]) 
       doc[i] = user[i] 
     } 
     doc.save(done); 
    }); 
} 
+0

是的,我使用貓鼬 – Snymax 2014-12-05 16:49:37

+0

我認爲更好的使用toObject – 2014-12-05 19:00:48

+0

你是非常好的先生謝謝你的指出。當我閱讀關於它的文檔時,我完全誤解了它,儘管它設置了保存對象的方法。謝謝你指出。 – Snymax 2014-12-06 00:27:42

回答

2

在你的情況下,查詢返回MongooseDocument,這就是爲什麼你得到像_doc性質,保存等對,你應該使用lean - 如果你使用這個功能,你得到純JS對象不MongooseDocument ..

this.model.findOne({_id:user._id}).lean().exec(function(err, doc){ 
    // .. 
}); 

或者使用toObject

this.model.findOne({_id:user._id}, function(err, doc){ 
    for (var i in doc.toObject()) { 
     console.log(i); 
    } 
});