how to update the specific field in mongoose

Viewed 97

the present Object is :-

{
    _id: "abc12344",
    renderId: '123456789',
    concernTo: [{
            name: 'vijay 4',
            id: 'snhdkjn786786',
            commons: []
        },
        {
            name: 'ak',
            id: 'sdkfg787877',
            commons: []
        }
    ]
}

Output needs to be like:

{
    _id: "abc12344",
    renderId: '123456789',
    concernTo: [{
            name: 'vijay 4',
            id: 'snhdkjn786786',
            commons: [{to: "xyz", from:"abc"}, {to: "xyz", from:"abc"}]
        },
        {
            name: 'ak',
            id: 'sdkfg787877',
            commons: []
        }
    ]
}

So need to push data in concernTo in commons field

In query i'm trying to search by renderId and id in "concernTo" array field and trying to update the object.

Query for that:---

 let obj = { to: "xyz", from: "abc" };
  let filter = {
    renderId: "123456789",
    "concernTo.id": "snhdkjn786786",
  };
  let update = {
    $push: {
      "concernTo.id.$": { subComment: obj },
    },
  };

  let doc = await blogsCommentModel.findOneAndUpdate(filter, update, {
    returnOriginal: false,
  });
  console.log(doc);
1 Answers

You want to be using arrayFilters for this, like so:

let doc = blogsCommentModel.findOneAndUpdate(filter,
{
  "$push": {
    "concernTo.$[elem].commons": obj
  }
},
{
  arrayFilters: [
    {
      "elem.id": "snhdkjn786786"
    }
  ]
})

Mongo Playground

Related