這是我蒙戈集「銷售」:如何在MongoDB的每個組中分組和選擇對應於max的文檔?
{"title":"Foo", "hash": 17, "num_sold": 49,
"place": "ABC"}
{"title":"Bar", "hash": 18, "num_sold": 55,
"place": "CDF"}
{"title":"Baz", "hash": 17, "num_sold": 55,
"place": "JKN"}
{"title":"Spam", "hash": 17, "num_sold": 20,
"place": "ZSD"}
{"title":"Eggs", "hash": 18, "num_sold": 20,
"place": "ZDF"}
我想通過哈希組,以最大的「num_sold」返回文檔。因此,作爲輸出我希望看到:
{"title":"Baz", "hash": 17, "num_sold": 55,
"place": "JKN"}
{"title":"Bar", "hash": 18, "num_sold": 55,
"place": "CDF"}
我知道基本的聚合運算符的,這裏是我會怎麼組和獲得最大num_sold的,但我需要對應最大整個文檔,而不僅僅是值。
db.getCollection('sales').aggregate([
{$group: {_id: "$hash", max_sold : {$max: '$value'}}}
])
在SQL中,我會加入它,但在mongo。我還讀到,在蒙戈組中排序並不能很好地協同工作。
mongodb'您正在使用什麼版本的'? – BatScream
@BatScream 3.0.4。我仍然在研究我的問題,看起來可以在客戶端的一個組中進行排序,但我不明白服務器和客戶端之間的區別。也似乎我可以用mapreduce完成相同的操作,但還不清楚如何。 – user1700890
可以避免使用昂貴的'$ sort'和'$ group'方法。請參閱下面的答案,以便在服務器端完成。 – BatScream