Mongoose findByIdAndUpdate删除未更新的属性

我有以下的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被删除(未设置?)。

我没有find这个logging。

有没有办法用findByIdAndUpdate只更新特定的文档属性?

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

重点是你正在设置一个对象来覆盖旧的对象。 如果你想更新一个字段,你需要修改你的更新对象。

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

这只会更新名称字段,保持rest对象在前一个。