У меня есть коллекция MongoDB с документами, которые выглядят так:
{
'_id': 'doc1',
'store_A': {'apples': 50, 'oranges':20},
'store_B': {'oranges': 15}
}
{
'_id': 'doc2',
'store_A': {'oranges':10},
'store_B': {'apples': 15}
}
Как мне написать команду агрегирования, чтобы получить общее количество фруктов для каждого магазина по всем документам в коллекции БЕЗ перечисления всех разрешенных видов фруктов?
Результат должен выглядеть так:
{
'_id': 'Result',
'store_A_total': {'apples': 50, 'oranges': 30},
'store_B_total': {'apples': 15, 'oranges': 15}
}
Этот запрос работает, но все типы фруктов должны быть указаны явно:
db.collection.aggregate(
{'$group': {'_id': 'Result',
'store_A_apples': {'$sum': '$Store_A.apples'},
'store_A_oranges': {'$sum': '$store_A.oranges'},
'store_B_apples': {'$sum': '$store_B.apples'},
'store_B_oranges': {'$sum': '$store_B.oranges'}
}},
{'$project': {
'store_A': {'apples': '$store_A_apples','oranges': '$store_A_oranges'},
'store_B': {'apples': '$store_B_apples','oranges': '$store_B_oranges'}
}})
Есть ли лучший способ структурировать эти документы, чтобы упростить запросы такого типа?