我有以下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
会更新,而email
和customerId
会被删除(未设置?)。
我没有发现这个记录。
是否有办法仅使用findByIdAndUpdate
更新特定文档属性?
答案 0 :(得分:16)
FindByIdAndUpdate实际上是通过文档ID发出mongodb findAndModify更新命令。
关键是你要设置一个对象来覆盖旧对象。如果要更新字段,则需要修改更新对象。
User.findByIdAndUpdate(id, {
$set: {
'facebook.name':name
}
});
这只会更新名称字段,保留旧对象的其余字段。