Mongo在匹配时聚合管道项目组(相当于SQL选择总和作为组)

时间:2019-05-18 12:49:30

标签: mongodb match project pipeline aggregation

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

然后,我需要在管道中进行反向操作,以选择未赢得奖牌的位置。我猜SQL中的等效项是选择结果在``第一'',``第二''或``第三''中的条目的太阳作为``奖牌'',并选择不在``第一'',``第二''中的条目的总和或“第三”作为“非勋章”。然后按国家/地区对结果分组。

下面是我到目前为止设法提出的查询,但似乎无法正确处理。

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 个答案:

答案 0 :(得分:1)

$ project步骤错误

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

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