Mongoose findByIdAndUpdate删除未更新的属性

时间:2014-10-19 07:31:00

标签: node.js mongodb mongoose

我有以下Mongoose模型:

var mongoose = require('mongoose');

var userSchema = mongoose.Schema({
    facebook: {
        name: String,
        email: String,
        customerId: String
    }
});

var User = mongoose.model('User', userSchema);

使用findByIdAndUpdate

更新本文档的一部分时
User.findByIdAndUpdate(id, { 
    $set: { 
        facebook: {
            name: name 
         }
    }
});

name会更新,而emailcustomerId会被删除(未设置?)。

我没有发现这个记录。

是否有办法仅使用findByIdAndUpdate更新特定文档属性?

1 个答案:

答案 0 :(得分:16)

FindByIdAndUpdate实际上是通过文档ID发出mongodb findAndModify更新命令。

关键是你要设置一个对象来覆盖旧对象。如果要更新字段,则需要修改更新对象。

User.findByIdAndUpdate(id, { 
$set: { 
    'facebook.name':name       
 }
});

这只会更新名称字段,保留旧对象的其余字段。