Объединение нескольких запросов агрегации в один с MongoDB - PullRequest
1 голос
/ 04 мая 2020

Я использую эти три запроса, чтобы иметь формат данных python со столбцами: «Дата», «% часть бизнеса 2», «% часть бизнеса 3». (для каждого дня, чтобы иметь процент прибыли от бизнеса 2 и 3).

query_business2 = collection.aggregate( [
        {
          '$match': {'Business': 2}      
        },
        {
                '$group': {
                        '_id': '$Date',
                        'stab2': {'$sum': '$Money'}
                }
        },
        {
                '$sort': {'_id': 1}
        }
        ])
query_business3 = collection.aggregate([
        {
                '$match': {'Business':3}
        },
        {
                '$group': {
                        '_id': '$Date',
                        'stab3': {'$sum': '$Money'}
                        }
        },
        {
                '$sort': {'_id': 1}
        }
        ])
query_total = collection.aggregate([
        {
                '$group': {
                        '_id': '$Date',
                        'total': {'$sum': '$Money'}
                        }
        },
        {
                '$sort': {'_id': 1}
        }
        ])

Чтобы это было быстрее, я хотел бы объединить эти три запроса в один. Я пытался использовать '$ or', но ничего не получалось из-за неразборчивых слов. Есть ли лучший способ сделать это? После этих запросов может быть возможно напрямую создать формат данных без использования pandas и рассчитать непосредственно процент от каждой компании по сравнению с общей заработанной суммой. Спасибо за вашу помощь

1 Ответ

1 голос
/ 04 мая 2020

Благодаря prasad_ ответ:

query_business = collection.aggregate([
        {
            '$group':{
                    '_id': '$Date',
                    'total_2': {'$sum' : {'$cond': [{'$eq': ['$Business', 2]}, '$Money', 0]}},
                    'total_3': {'$sum' : {'$cond': [{'$eq': ['$Business', 3]}, '$Money', 0]}},
                    'total': {'$sum': '$Money'},
                    }
        },
        {
            '$match': {'$and': [{ 'total_2': {'$gt': 0}}, {'total': {'$gt': 0}},{'total_3':{'$gt':0}}]}     
        },
        {
            '$addFields':{
                    'part_2': { "$multiply": [ { "$divide": ["$total_2","$total"] }, 100 ] },
                    'part_3': { "$multiply": [{'$divide': ['$total_3','$total']}, 100]}
                    }
        }
        ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...