Mongo 汇总匹配的管道项目组(相当于 SQL select sum as group)

Mongo aggregate pipeline project groups on match (equivalent to SQL select sum as group)

我是 Mongo 数据库的新手,非常感谢对以下数据库查询的帮助。我基本上需要 select 所有“结果”字段为“第一”、“第二”或“第三”的结果,以及在国家/地区内分组为“奖牌”(获得奖牌的地方)的项目。

然后我需要在没有赢得奖牌的地方 select 进行反向操作。我想 SQL 中的等价物是 select 结果在“第一”、“第二”或“第三”中作为“奖牌”的条目的太阳。而 select不在“第一”、“第二”或“第三”中的条目总和为“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 方式接近它。

谢谢,

$项目步骤错误

由于您在 $group 步骤中定义了 {_id:{outcome:"$foo"}},因此您必须在项目步骤中使用 outcome:"$_id.outcome"

您在 pipeline_4 中有两条管道?您需要创建两个请求