Помогите составить правильный запрос на обновление данных в mongoose при сложной вложенности объектов

Подскажите пожалуйста, как должен выглядеть запрос к бд в mongoose, чтобы найти конкретный вложенный объект. Вот пример объекта:

{
  name: "test",
  password: "123456",
  actions: [{
    _id: "1",
    name: "Walk",
    dates: [{
      _id: "101",
      status: false
    }, {
      _id: "102",
      status: false
    }]
  },
  {
    _id: "2",
    name: "Walk 2",
    dates: [{
      _id: "103",
      status: false
    }, {
      _id: "104",
      status: false
    }]
  }]
}

Сама задача такая: Например, в этом объекте нам нужно найти actions, где name должно быть равно Walk 2 и id соответственно равным 2, и в этом actions в свойстве dates надо найти только один объект, _id которого равно 104. Затем в этом найденном объекте нужно обновить свойство status на true и только в нём.

Я попытался найти по такому запросу, но выдало ошибку:

db.users.findOneAndUpdate({
    name: "test",
    actions: {
      $elemMatch: {
        _id: "2"
      },
      dates: {
        $elemMatch: {
          _id: "104"
        }
      }
    }
  },
  { $set: {
    'actions.$.dates.$.status': true
    }
  },
  (err) => {
    if (err) throw err;

    res.json('success');
  }
);

В общем, я не понимаю, как можно при таком уровне вложенности объектов, найти и обновить один конкретный объект, в данном случаем по его _id, который находится на самом глубоком уровне.


Ответы (0 шт):