Javascript MongoDB/Mongoose:标记已修改嵌套对象

Javascript MongoDB/Mongoose:标记已修改嵌套对象,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,不幸的是,我没有可以测试这个的记录,但我在任何地方都找不到关于这个的任何信息 假设我有这样一份文件: { email: { type: 'Gmail', data: {//freeform data}, } } 我想更新doc.email.data。我需要使用markModified(),否则数据将无法正确保存 我是这样修改的吗 doc.email.data = newData; doc.markModified('email.data'); doc.

不幸的是,我没有可以测试这个的记录,但我在任何地方都找不到关于这个的任何信息

假设我有这样一份文件:

{
  email:  {
       type: 'Gmail',
       data: {//freeform data},
    }
}
我想更新
doc.email.data
。我需要使用
markModified()
,否则数据将无法正确保存

我是这样修改的吗

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

或者我只需执行
markModified('email')
,Mongoose将解决其余问题?

您需要提供修改对象字段的完整路径,因此它应该是:

doc.markModified('email.data');

谢谢你,约翰尼。执行
doc.markModified('email')
是否仍会导致
数据
属性更新?我想它只是更贵了,我不想这样,但我想了解这种东西是如何工作的。@Jascination我希望它也能工作,但它会更新整个
email
对象,而不仅仅是您需要的
数据部分。值得注意的是,当嵌套对象是Mongoose子文档时,调用
markModified
是不必要的,因为它将具有完全的更改检测(使用日期等时除外)。