我正在尝试在更新功能期间遍历文档
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)),但这不起作用。
更新:如果有人认为有更好的解决方法,这会很好地工作,请告诉我
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);
});
}
最佳答案
在这种情况下,查询返回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);
}
});
关于javascript - 通过mongodb条目javascript Node 进行迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27320492/