Помогите составить правильный запрос на обновление данных в 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, который находится на самом глубоком уровне.