仅更新提供的字段

时间:2015-01-12 06:31:21

标签: node.js mongoose

现在我这样做:

         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,如何更新名称?

2 个答案:

答案 0 :(得分:1)

您可以查看值

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

答案 1 :(得分:0)

另一种可能性是使用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"
}