2016-12-04 89 views
2

所以目前我正在努力从我的查询中获得正确的结果。 下面是它的外观:

db.pitching.aggregate([ 
    { $match: {} }, 
    { $group: { 
     _id: "$playerid", 
     maxIpouts: { $max: "$ipouts" } 
    }} 
]) 

我知道,我必须使用$match,以获得正确的结果。我想得到一个单一的球员有最高($max)ipouts,但我不知道如何筛选使用$match

没有$match它给我的player_id每个ipout的球员,而不是具有最高ipout一个玩家ID。

回答

0

您不需要为此进行聚合。您可以使用收集find的玩家ID与光标sort匹配降支,然后光标limit获得第一行处理结果。

db.pitching.find({ "playerid": "playerid" }).sort({ "ipouts": -1 }).limit(1) 

你可以得到最多玩家在整个集合ipouts当你删除过滤器。

db.pitching.find().sort({ "ipouts": -1 }).limit(1) 
0

你并不需要一个$match管道对于这一点,你只需要以下步骤管道附加到当前查询(减去$match)得到你想要的结果。

$sort - 当你从以前$group管道的结果,则需要由maxIpouts场订购的文件,让你得到与订购了最ipouts的文件。

$limit - 这会给你最高的文件。现在

,组装上述在一起,你应该运行下面的管道,以获得期望的结果:

​​