仅更新提供的字段

Update only field that is provided

现在我正在这样做:

         User.findById(data.id, function(err, user){
            if(err) {
                callback(err, null);
            } else {
                user.email = data.email;
                user.name= data.name;
                user.save(function(err, result){
                    if(err){
                        callback(err, null);
                    } else {
                        callback(null, result);
                    }
                })
            }
        });

如果未提供 data.name,我如何不更新名称?

您可以检查值

Object.keys(data).forEach(function (el) {
  if (data[el]) { // if value not `undefined`, `0`, `''`, `null`, `false` 
    user[el] = data[el];      
  }  
})

另一种可能性是使用 underscore.js 并使用 extend 函数,它只会将属性分配给目标对象(如果已定义)。

var obj1 = { name: "Michael", email:"michael@example.com" };
var obj2 = { email: "michael@whatever.com" };
_.extend(obj1, obj2);

结果将是:

{
  name: "Michael",
  email: "michael@whatever.com"
}