Mongoose findByIdAndUpdate удаляет не обновленные свойства

у меня есть следующая модель Мангуста:

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?

1 ответов


FindByIdAndUpdate фактически выдает команду обновления mongodb findAndModify по идентификатору документов.

дело в том, что вы устанавливаете объект для перезаписи старого объекта. если вы хотите обновить поле, вам необходимо изменить объект обновления.

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

это обновит только поле имени, сохраняя объект rest в предыдущем.