我是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方法进行处理。
谢谢
答案 0 :(得分:1)
$ project步骤错误
由于您在$ group步骤中定义了{_id:{outcome:"$foo"}}
,因此必须在项目步骤中使用outcome:"$_id.outcome"
。
您在pipeline_4中有两个管道?您需要创建两个请求