Mongoose findByIdAndUpdate删除未更新的属性

krl*_*krl 11 mongoose mongodb node.js

我有以下Mongoose模型:

var mongoose = require('mongoose');

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

var User = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

当我使用更新本文档的一部分时 findByIdAndUpdate

User.findByIdAndUpdate(id, { 
    $set: { 
        facebook: {
            name: name 
         }
    }
});
Run Code Online (Sandbox Code Playgroud)

name得到更新,同时emailcustomerId得到去除(未设置?).

我没有找到这个记录.

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

Viv*_*pai 17

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

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

User.findByIdAndUpdate(id, { 
$set: { 
    'facebook.name':name       
 }
});
Run Code Online (Sandbox Code Playgroud)

这将仅更新名称字段,保留旧对象的其余字段.

  • 好吧,事实并非如此。我只是测试了它而没有这样设置:User.findByIdAndUpdate(id,{'facebook.name':name}),它保留了所有旧字段。 (2认同)