#python #mongodb #pymongo
#питон #mongodb #пимонго
Вопрос:
Наличие N документов следующего типа:
{ "source": { "domain": "1", "type": "2" }, "assets": [1, 2] } { "source": { "domain": "3", "type": "4" }, "assets": [3, 4, 5] }
Как я могу получить общее количество активов среди всех документов, сгруппированных по домену типу?
В приведенном выше случае запрос должен возвращать этот домен:1 тип:2 содержит 2 объединенных ресурса в 1 документе, в то время как домен3 тип:4 содержит 3 объединенных ресурса в 1 документе.
Обратите внимание, что domain:1 type:2 != domain:2 type:1
.
Моя первая попытка была
collection.aggregate([ { "$project": { "_id": 0, "arraySize":{"$size":"$assets"} } }, { "$group": { "_id": {"$concat": ["$source.domain", "-", "$source.type"]}, "totalArraysSize":{"$sum":"$arraySize"} } }, ])
Но он только возвращается [{'_id': None, 'totalArraysSize': 616}]
, без группировки.
Ответ №1:
Мне удалось написать решение после экспериментов с синтаксисом:
collection.aggregate([{ "$group": { "_id": {"source": "$source.domain", "type": "$source.type"}, "asset_count":{"$sum":{"$size":"$assets"}}, "total_count":{"$sum": 1}, } }])