С учетом следующих данных после раскручивания в агрегате:
let workOrders = [
{customer: 'A', job: 'Apple', chemical: {name: 'Chem A', quantity: 500}},
{customer: 'A', job: 'Banana', chemical: {name: 'Chem B', quantity: 400}},
{customer: 'A', job: 'Banana', chemical: {name: 'Chem C', quantity: 300}},
{customer: 'B', job: 'Cherry', chemical: {name: 'Chem A', quantity: 200}}
]
Требуется вывод:
[
{
customer: 'A',
jobs: [
{
job: 'Apple',
chemicals: [
{name: 'Chem A', quantity: 500}
]
},
{
job: 'Banana',
chemicals: [
{name: 'Chem B', quantity: 400},
{name: 'Chem C', quantity: 300}
]
}
]
},
{
customer: 'B',
jobs: [
{
job: 'Cherry',
chemicals: [
{name: 'Chem A', quantity: 200}
]
}
]
}
]
Я понимаю, как использовать группу и группировать ее сначала по клиенту, но потом яне понимаю, как создать массив вложенных химикатов, не испортив первоначальную группу клиентов.
Я пробовал что-то подобное, но мне не нравится внутренний $ push.
{
"$group": {
"_id": "$customer",
"groups": {
$push: {
"group_data": "$customer",
"group_count": {$sum: "$customer"},
"group_child": {
$push: {
"group_data": "$job",
"group_count": {$sum: "$job"},
"group_children": {
$push: {
"group_data": "$chemical.name",
"group_count": {$sum: "$chemical.name"}
}
}
}
}
}
}
}
Также хотел бы добавить общее количество на одного клиента и на работу