Монго агрегатные конвейерные группы проектов на совпадение (эквивалент SQL выбирают сумму в качестве группы) - PullRequest
0 голосов
/ 18 мая 2019

Я новичок в БД Mongo и буду очень признателен за помощь в следующем запросе к базе данных.В основном мне нужно выбрать все результаты, где поле «Результат» находится в поле «первый», «второй» или «третий», и проект, который сгруппирован по странам как «медали» (где медали завоеваны).

Затем мне нужно сделать обратное в конвейере, чтобы выбрать, где медали не были выиграны.Я думаю, что эквивалентом в SQL будет выбор солнца из записей, где результат в «первый», «второй» или «третий» в качестве «медалей». И выберите сумму записей не в «первый», «второй»или «третий» как «non_medals».Затем сгруппируйте результаты по странам.

Ниже приведен запрос, который мне удалось найти до сих пор, но, похоже, он не может быть правильным.

pipeline_4 = [

{'$match': {'Outcome': {'$in': ['first','second', 'third'] } ,'Country': {'$exists': True}}},

{'$group': {'_id': {'outcome': '$Outcome', 'country': '$Country'},
                    'medals': {'$sum': 1}}},

{'$project': {
    'outcome': 1, 'country', 1, 'medals': 1
}},

{'$match': {'Outcome': {'$nin': ['first','second', 'third'] } ,'Country': {'$exists': True}}},

{'$group': {'_id': {'outcome': '$Outcome', 'country': '$Country'},
                    'non_medals': {'$sum': 1}}},

{'$project': {
    'outcome': 1, 'country', 1, 'non_medals': 1
}}

]

Может кто-нибудь посоветовать по этому поводу?на данный момент мне возвращаются только группы медалей, а они не сгруппированы.Если вам нужна дополнительная информация, пожалуйста, спросите, поскольку я говорю, что я новичок в Mongo и, возможно, подхожу к ней слишком стандартным способом SQL.

Спасибо,

1 Ответ

1 голос
/ 18 мая 2019

$ шаг проекта неверен

Поскольку вы определили {_id:{outcome:"$foo"}} на шаге $ group, вы должны использовать outcome:"$_id.outcome" на шаге проекта.

У вас есть два конвейера в pipe_4?вам нужно создать два запроса

...