findOneAndUpdate doesn't update object's field (array of objects)

Viewed 49

I'm trying to update multiple fields of a object in an array but it doesn't work. what am i doing wrong?

Data Sample:

{
  _id: 'mongodbid',
  name: 'something',
  employees: [
    {
      age: 25,
      name: 'name',
      salary: 500
    },
    {
      age: 28,
      name: 'name2',
      salary: 700
    }
  ],
}

Query:

await this.somethingModel
      .findOneAndUpdate(
        {
          _id: id,
          'employees.age': 25,
        },
        {
          $set: {
            'employees.$.salary': 600,
            'employees.$.name': 'name4',
          }
        },
      )
      .exec();
1 Answers

I've added a arrayFilter in findOneAndUpdate. Try with this one, I hope, it works.

await this.somethingModel.findOneAndUpdate(
  {
    _id: id,
  },
  {
    $set: {
      "employees.$[elem].salary": 600,
      "employees.$[elem].name": "name4"
    }
  },
  {
    $arrayFilters: [
      {
        "elem.age": 25,
      },
    ],
  });
Related