mongodb 中的数组过滤器

Kod*_*uri 7 mongoose mongodb mongodb-query

我有以下架构。

{
   posts: [
          {
             _id: '5ayuunbdsyuuuyut778'
             replies: [{
                 _id: "67hfudj7e9whduu888",
                 text: "something"
             }]
          }
      ]
}
Run Code Online (Sandbox Code Playgroud)

我想更新文字,特别是回复。我正在使用猫鼬。

我已将查询编写如下

Post.findOneAndUpdate(
   {'posts.replies._id': _id}, 
   {$set: {'posts.$[post].replies.$[reply].text': "something1"}},
   { arrayFilters: [{'post._id': postId}, { 'reply._id': _id }]}
 )
Run Code Online (Sandbox Code Playgroud)

此查询未更新文档。

我错过了什么吗?我是否需要使用 ObjectId 来转换 ids

Ash*_*shh 8

您需要使用new: true来获取更新的值并将 id 转换为 mongoose objectId 以使其工作

Post.findOneAndUpdate(
   { 'posts.replies._id': _id }, 
   { $set: { 'posts.$[post].replies.$[reply].text': "something1" } },
   { arrayFilters: [{ 'post._id': postId }, { 'reply._id': _id }], new: true }
)
Run Code Online (Sandbox Code Playgroud)