我正在尝试在更新功能期间遍历文档

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/

10-09 22:00