如何使用findOneAndUpdate更新子文档?

cod*_*ode 9 mongoose mongodb node.js

收藏书中有一份文件:

{ _id : someMongooseGeneratedId,
  name : 'myBook',
  data : [{_id : 'page', name : 'one'},{ _id : 'chapter', name : 'Chapter One' }]
 }
Run Code Online (Sandbox Code Playgroud)

我想更新书名为'myBook'的书籍:将章节名称设置为'第1章'到_id为'章节'的数据

结果如下:

{ _id : someMongooseGeneratedId,
  name : 'myBook',
  data : [{_id : 'page', name : 'one'},{ _id : 'chapter', name : 'Chapter 1' }]
 }
Run Code Online (Sandbox Code Playgroud)

我希望用mongoose进行单一查询.

cod*_*ode 15

以下适用于我:

Model.findOneAndUpdate({ name : 'myBook', "data._id" : 'chapter' }, { "data.$.name" : 'Chapter 1' });
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,我似乎无法使上述(优雅的)解决方案起作用。data._id 和 data.$.name 上的语法错误。这应该适用于最近版本的猫鼬吗? (2认同)