Search code examples
mongodbmongoosemongodb-query

arrayFilters in mongodb


I have the following schema.

{
   posts: [
          {
             _id: '5ayuunbdsyuuuyut778'
             replies: [{
                 _id: "67hfudj7e9whduu888",
                 text: "something"
             }]
          }
      ]
}

I want to update the text in particular reply. I am using mongoose.

I have written the query as follows

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

This query is not updating the document.

Am I missing something? Do I need to cast ids using ObjectId


Solution

  • You need to use new: true to get the updated value and cast id to mongoose objectId to make it work

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