Я пытаюсь найти и обновить некоторые поля во вложенном массиве объектов. Я выравниваю массивы с помощью $unwind
, затем использую $match
, чтобы изолировать экземпляры, которые я хочу обновить, но $set
, похоже, не работает. Может быть, я не могу использовать его таким образом?
Две записи перед попыткой $set
:
[
{
_id: 5dabcdf7501b3b4ab66f9f76,
tasks: {
_id: 5dabcde5c4a0ab4aa106af7d,
task: '19',
name: 'beyond',
dimension: 'Transformational Leadership',
subDimension: 'unknown',
points: 1,
imgUrl: 'imgs/19.svg',
text: 'You completed a custom challenge!',
userId: '5dabcdf7501b3b4ab66f9f76',
createdAt: '48-Mo:01:48'
},
awards: [],
firstName: 'bob',
lastName: 'bob',
location: 'Campbell, USA',
unit: 'AMSBG',
group: 3,
team: 1,
createdAt: 2019-10-20T03:01:11.071Z,
updatedAt: 2019-10-29T16:03:54.002Z,
no_of_tasks: 9,
points: 9
},
{
_id: 5dabcdf7501b3b4ab66f9f7d,
tasks: {
_id: 5dabcde5c4a0ab4aa106af7d,
task: '19',
name: 'beyond',
dimension: 'Transformational Leadership',
subDimension: 'unknown',
points: 1,
imgUrl: 'imgs/19.svg',
text: 'You completed a custom challenge!',
userId: '5dabcdf7501b3b4ab66f9f7d',
createdAt: '48-Mo:01:48'
},
awards: [],
firstName: 'bobette',
lastName: 'bob',
location: 'Taiperi',
unit: 'Finance',
group: 1,
team: 1,
createdAt: 2019-10-20T03:01:11.072Z,
updatedAt: 2019-10-29T18:24:20.480Z,
no_of_tasks: 40,
points: 40
}
]
запроса, как я думал, он должен работать:
const tasks = await User.aggregate([
{ $unwind: '$tasks' },
{ $match: {'tasks.name': foo.name} },
{ $set:
{'tasks.text': foo.text,
'tasks.subDimension': foo.subDimension }
}
])
хотел бы получить представление о том, почему он терпит неудачу