2015-10-14 59 views
1

以上值的文檔我有一個學生集合具有下列結構文件:如何選擇平均

{ 
    "student_name": "john", 
    "score": 39, 
} 

我想選擇誰擁有比得分所有學生的平均分更高的學生。

我試過以下,但它只返回一個學生。

db.students.find().sort({"score":-1}).limit(1).pretty() 

如果超過一名學生有最高分數,我想獲得整套學生。

+2

這將有助於我們看你有沒有嘗試過的東西,你採取什麼辦法。這有助於我們爲您提供對解決方案最深入的瞭解,如果這樣做最終成爲家庭作業,那麼我們仍然欺騙您學習一些東西。 – SamHuckaby

+0

您的查詢將只抓取一條記錄,這將成爲最佳射手,因爲您已經使用了排序得分 - 降序和限制爲1條記錄 –

+0

可能的重複[如何獲得每個組和陣列的最高字段值相應文件的字段?](http://stackoverflow.com/questions/34007949/how-to-get-the-highest-value-of-a-field-for-each-group-and-the-array-的-correspo) – styvane

回答

0

您需要使用.aggregate()方法和$avg累加器運算符。

var average = db.students.aggregate([ 
    { "$group": { "_id": "null", avg: { "$avg": "$score"} }} 
]).toArray()[0]["avg"]; 

然後使用.find()方法

db.students.find({ "score": { "$gt": average } })