2016-01-14 3 views
1

К сожалению, у меня нет записи, на которой я могу проверить это, но я не могу найти никакой информации об этом в любом месте.MongoDB/Mongoose: MarkModified вложенный объект

Скажем, у меня есть документ, как это:

{ 
    email: { 
     type: 'Gmail', 
     data: {//freeform data}, 
    } 
} 

Я хочу обновить doc.email.data. Мне нужно использовать markModified(), иначе данные не будут сохранены правильно.

Я отмечу как измененный?

doc.email.data = newData; 
doc.markModified('email.data'); 
doc.save(); 

Или я просто markModified('email') и Mongoose будут работать остальные?

ответ

7

Вы должны обеспечить полный путь измененного поля объекта, поэтому оно должно быть:

doc.markModified('email.data'); 
+1

Спасибо Джонни. Выполняет ли 'doc.markModified ('email')' все еще вызывает обновление свойства 'data'? Я предполагаю, что это просто дороже, чего я не хочу, но я пытаюсь понять, как это работает. – Jascination

+1

@Jascination Я бы ожидал, что это тоже сработает, но оно будет обновлять весь объект 'email' вместо того, что вам нужно. – JohnnyHK

Смежные вопросы