2016-06-19 27 views
-1

MongoDBの使用を開始したばかりで、特定のコースから平均学年を取得しようとしました。ここでの質問の大半は、集計、$ sumまたは$ projectを使用することです。私は、関数のパラメータとして学生のコース名とインデックスを渡しています。コースを繰り返して試してみましたが、値を合計してみました。特定のコースから特定の学生の合計値を得るために反復:配列要素の合計を返しますMongoDB

function (course, index) { 

studcourses = db.students.find({course:course}); 
studnr = db.students.find({index:index}); 
results = []; 
var sum = 0; 
for (var i = 0; i < studcourses.length(); i++) 
{ 
sum = sum + studcourses[i].grades; 
} 
mean = sum/studcourses.length(); 
results.push("Mean grade from course " + course + " for index: " + index + " " + mean); 
return results; 
} 

ここでは、学生のコレクションはどのように見えるかです:

{ 
"_id": ObjectId("57644746473defc5128f8687"), 
"index": 123345, 
"name": "Andrew", 
"surname": "Kaka", 
"grades": { 
"DMI": [ 
    4, 
    5, 
    3, 
    2 
], 
"IABD": [ 
    3, 
    5, 
    3, 
    5 
], 
"NPAD": [ 
    2, 
    4, 
    5, 
    2, 
    4, 
    5 
] 
} 
} 

答えて

0

私はあなたが最新のバージョンを使用していると仮定していますMongoDBとNodeJSドライバの試してみてください:

var find = function(course, idx){ 
    var grades = "$grades." + course; 
    var result = db.collection.aggregate([ 
    {$match:{"index": ix}}, 
    {$project:{index:1, surname:1, total: {$sum: grades}, average: {$avg: grades}}} 
    ]); 

    return result; 
}; 

あなたのようにあなたのコード内の関数の上に呼び出すことができます:あなたが学生のインデックス123345のためのコースIABDを探していると仮定すると、

find("IABD", 123345); 

、上記のコードは

{ 
    "_id" : ObjectId("57644746473defc5128f8687"), 
    "index" : NumberInt(123345), 
    "surname" : "Kaka", 
    "total" : NumberInt(16), 
    "average" : NumberInt(4) 
} 
+0

はそんなにありがとう戻ります! :) –

+0

私はすべてのコースの平均を取得し、パラメータとしてインデックスだけを入力したいと思った場合はどうしたらよいでしょうか? –

+0

それは可能ですが、私はあなた自身の学習のための良い研究としていくつかの研究を行うことをお勧めします。 – Saleem

関連する問題