Created
June 10, 2015 06:17
-
-
Save imjoey/eeba909bab50c6b3bde0 to your computer and use it in GitHub Desktop.
aggregate by nodejs mongoose library @ mongodb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express'); | |
var router = express.Router(); | |
var Task = require('../models/task'); | |
var Auditlog = require('../models/auditlog'); | |
var User = require('../models/user'); | |
var auditprivileges = require('../common').audits; | |
var _ = require('underscore'); | |
var mongoose = require('../common').mongoose; | |
var Schema = mongoose.Schema; | |
var TaskSchema = new Schema({ | |
taskname: { type: String, default: '' }, | |
project: { type: Schema.Types.ObjectId, ref: 'Project'}, | |
// 1*16: dev, 2*16: test, 4*16: project manager, 8*16: tech manager | |
tasktype: { type: Number, default: 16 }, | |
date: { type: Date, default: Date.now }, | |
rdmtask: { type: String, default: '' }, | |
worker: { type: Schema.Types.ObjectId, ref: 'User' }, | |
wholequality: { type: Number, min: 0, max: 100, default: 0 }, | |
process: { type: Number, min: 0, max: 100, default: 0 }, | |
docquality: { type: Number, min: 0, max: 100, default: 0 }, | |
satisfied: { type: Number, min: 0, max: 100, default: 0 }, | |
innovate: { type: Number, min: 0, max: 100, default: 0 }, | |
standard: { type: Number, min: 0, max: 100, default: 0 }, | |
shares: { type: Number, min: 0, max: 100, default: 0 }, | |
weight: { type: Number, min: 0.8, max: 1.2, default: 1 }, | |
// final score | |
score: Number, | |
remark: { type: String, default: '' }, | |
mixed: Schema.Types.Mixed | |
}); | |
/** | |
* get ranks | |
* | |
* @return {[type]} [description] | |
*/ | |
router.get('/ranks', function(req, res, next) { | |
Task.aggregate( | |
// show both total and average score, ordered by average asc. | |
{ $group: { _id: '$worker', totalscore: { $sum: '$score' }, avgscore: { $avg: '$score'}}}, | |
{ $project: { _id: 1, totalscore: 1, avgscore: 1 } }, | |
{ $sort: { avgscore: -1 }}, | |
function(err, idscores) { | |
if (err) return next(err); | |
User.populate(idscores, | |
{ path: '_id', model: 'User', select: 'name'}, | |
function(err, userscores) { | |
res.json(userscores); | |
} | |
); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment