在線考試系統(tǒng)之成績統(tǒng)計

MongoDB 聚合(aggregate() 方法)

1 語法
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
aggregate詳細步驟
2 答題表定義

學(xué)生IDuserId股淡,題目IDquestionId,課程名subject各聘,回答內(nèi)容answerCtn揣非,得分score

/* 回答內(nèi)容定義 */
var answerSchema = new Schema({
    userId: {type: ObjectId, ref: 'User'},
    questionId: {type: ObjectId, ref: 'Question'},
    subject: String,
    answerCtn: String,
    score: Number,
    meta: {
        updateAt: {type:Date, default: Date.now()},
        createAt: {type:Date, default: Date.now()}
    }
});
3 學(xué)生成績表定義

學(xué)生IDuserId,課程名subject躲因,成績score

/* 學(xué)生成績定義 */
var gradeSchema = new Schema({
    userId: {type: ObjectId, ref: 'User'},
    subject: String,
    score: Number,
    meta: {
        updateAt: {type:Date, default: Date.now()},
        createAt: {type:Date, default: Date.now()}
    }
});
4 統(tǒng)計方法
  • 成績統(tǒng)計是指對某一個學(xué)生的某門課程每道題目得分的總和早敬。
  • aggregate()方法先利用$match查詢處課程為WEB的答題列表,$group將學(xué)生ID一樣的數(shù)據(jù)組合成一個集合大脉,$sum計算同一集合里的score總和
  • aggregate()結(jié)果依次保存進學(xué)生成績表grade搞监。
//統(tǒng)計成績
exports.statisticScore = function (data, cb) {
    async.waterfall([
        function (cb) {
            Answer.aggregate([
                { $match: { subject: "WEB" }},
                { $group: { _id: "$userId", totalScore: { $sum: "$score" }}}
            ], function (err, docs) {
                if (err) {
                    console.log(err);
                } else {
                    cb(err, docs);
                }
            });
        },
        function (result, cb) {
            for(var i = 0; i < result.length; i++) {
                var grade = new Grade({
                    userId: result[i]._id,
                    subject: "WEB",
                    score: result[i].totalScore
                });
                grade.save(function (err, doc) {
                    if(err) {
                        console.log(err);
                        entries.code = 99;
                    }
                });
            }
            cb(null, entries);
        }
    ], function (err, result) {
        cb(true, result);
    });
    console.log("done");
};
5 統(tǒng)計結(jié)果
aggregate()結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市镰矿,隨后出現(xiàn)的幾起案子琐驴,更是在濱河造成了極大的恐慌,老刑警劉巖秤标,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绝淡,死亡現(xiàn)場離奇詭異,居然都是意外死亡苍姜,警方通過查閱死者的電腦和手機牢酵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衙猪,“玉大人馍乙,你說我怎么就攤上這事〉媸停” “怎么了丝格?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棵譬。 經(jīng)常有香客問我显蝌,道長,這世上最難降的妖魔是什么订咸? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任琅束,我火速辦了婚禮,結(jié)果婚禮上算谈,老公的妹妹穿的比我還像新娘。我一直安慰自己料滥,他們只是感情好然眼,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葵腹,像睡著了一般高每。 火紅的嫁衣襯著肌膚如雪屿岂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天鲸匿,我揣著相機與錄音爷怀,去河邊找鬼。 笑死带欢,一個胖子當(dāng)著我的面吹牛运授,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乔煞,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吁朦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渡贾?” 一聲冷哼從身側(cè)響起逗宜,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎空骚,沒想到半個月后纺讲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡囤屹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年熬甚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺丙。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡则涯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冲簿,到底是詐尸還是另有隱情粟判,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布峦剔,位于F島的核電站档礁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吝沫。R本人自食惡果不足惜呻澜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惨险。 院中可真熱鬧羹幸,春花似錦、人聲如沸辫愉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屏镊,卻和暖如春依疼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背而芥。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工律罢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棍丐。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓误辑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骄酗。 傳聞我的和親對象是個殘疾皇子稀余,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法趋翻,內(nèi)部類的語法睛琳,繼承相關(guān)的語法,異常的語法踏烙,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,231評論 0 7
  • 周六师骗,加班。和往常不一樣的是讨惩,涂小丫沒有坐地鐵回去辟癌,蹭了同事的車。天氣預(yù)報說明天會有臺風(fēng)荐捻,所以今天也像提醒似的下著...
    一馬踏平川閱讀 157評論 0 0
  • 給UIlabel創(chuàng)建分類 UILabel+LabelHeight.h 1.在.h中寫接口,傳給它必要的參數(shù) /**...
    9e5f2143c765閱讀 1,618評論 1 1