迭代通过MongoDB的条目的JavaScript节点
问题描述:
我想通过一个文档遍历我的更新功能时迭代通过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);
});
}
答
答
见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
keys = Object.keys(doc); // returns an array of keys
keys.forEach(function(key{
if (typeof doc[key] !== 'function' && user[key] && doc[key] !== user[key]) {
// do what you want here
}
})
应该让你开始那。如果doc[key]
或user[key]
是一个对象,他们won't是相等的。谷歌的'JavaScript对象平等'来找到一个适合你的解决方案。
是的,我使用猫鼬 – Snymax 2014-12-05 16:49:37
我认为更好的使用toObject – 2014-12-05 19:00:48
你是非常好的先生谢谢你的指出。当我阅读关于它的文档时,我完全误解了它,尽管它设置了保存对象的方法。谢谢你指出。 – Snymax 2014-12-06 00:27:42