2016-12-04 90 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 - 這會給你最高的文件。現在

,組裝上述在一起,你應該運行下面的管道,以獲得期望的結果:

​​