#node.js #mongodb #mongoose #data-structures #aggregate
Вопрос:
Я борюсь с тем, как объединить два объекта после поиска в конвейере агрегации.
Структура проектной документации:
{
_id: "609daa4a831d2cfee5a54c7e",
projectName: "Test",
items: [
{
"show": true,
"_id": "609daa4e831d2cfee5a54c7f",
"order": 0,
"item": "609da844b9c98ffeb5b42c0f",
"createdAt": "2021-05-13T22:38:06.264Z",
"uid": "607d6f08734bdb0fdd8f9837",
"updatedAt": "2021-05-13T22:38:06.264Z"
},
{
"show": true,
"order": 1,
"_id": "609daa4e831d2cfee5a54c7e",
"item": "609daaa4831d2cfee5a54c81",
"createdAt": "2021-05-13T22:38:06.264Z",
"uid": "607d6f08734bdb0fdd8f9837",
"updatedAt": "2021-05-13T22:38:06.264Z"
},
....
]
}
После агрегирования я хотел бы сначала выполнить поиск$, чтобы получить фактический элемент, на который ссылается project.items[].item, а затем поместить исходные данные в project.items[] в новый ключевой project.items[].ProjectData, как это:
const afterAggregation = {
id: "609daa4a831d2cfee5a54c7e",
projectName: "Test",
items: [
{
"id": "609e6a82eca2c80a8d3bad8a",
"originalName": "z_paymentCancelled_9.wav",
....
"projectData": {
"show": true,
"createdAt": "2021-05-13T22:38:06.264Z",
"uid": "607d6f08734bdb0fdd8f9837",
"updatedAt": "2021-05-13T22:38:06.264Z"
}
},
{
"id": "609e6a82eca2c80a8d3bad8a",
"originalName": "z_paymentCancelled_9.wav",
....
"projectData": {
"show": true,
"createdAt": "2021-05-13T22:38:06.264Z",
"uid": "607d6f08734bdb0fdd8f9837",
"updatedAt": "2021-05-13T22:38:06.264Z"
}
},
]
}
Вот как я выполняю первый поиск, который работает нормально:
"$lookup": {
"from": "items",
"let": { "itemIds": "$items.item" },
"pipeline": [
{ "$match": { "$expr": { "$in": ["$_id", "$itemIds"] } } },
{
$addFields: {
id: { $toString: "$_id" },
},
},
{
$project: { '_id': 0, 'wav2json': 0 },
},
],
"as": "items"
}
Но не понимаете, как добавить исходные данные в элементы[].ProjectData??
В качестве бонуса я хотел бы дополнительно иметь возможность сортировать агрегированные элементы по project.items[].order…
Любая помощь глубоко признательна!
Комментарии:
1. Сделал игровую площадку с неправильным ответом, если это поможет mongoplayground.net/p/Rp0wDph0ZNi