var express = require('express'); var router = express.Router(); var debug = require('debug')('Icarus:server'); var mongoClient = require('mongodb').MongoClient; var assert = assert = require('assert'); // Connection URL var mongoUrl = 'mongodb://icarus:icarus@localhost:27017/icarus'; //Connect to the server and intialise the pool var icarusDb; mongoClient.connect(mongoUrl, function(err, db) { assert.equal(null, err, err); debug("Connected to MongoDB database: "+db.databaseName); icarusDb = db; }); /* GET root . */ router.get('/', function(req, res, next) { res.sendStatus(200); }); router.get('/users', function(req, res, next) { var collection = icarusDb.collection('resources'); collection.aggregate( // Pipeline [ // Stage 1 { $match: { "appdata.appname":"Invisible Puzzle", "debug":false } }, // Stage 2 { $group: { "_id": "$appdata.uuid", "docs": {$sum: 1}, "voiceover": {$sum : {$cond: [{$eq:["$appdata.voiceover", true]},1,0]}} } }, // Stage 3 { $project: { "docs": 1, "vo_ratio": {$divide:["$voiceover","$docs"]} } }, // Stage 4 { $group: { "_id": 1, "users": {$sum: 1}, "vib": {$sum : {$cond: [{$gt:["$vo_ratio", 0]},1,0]}} } }, // Stage 5 { $project: { "_id": 0, "users": 1, "vib": 1 } } ] ).toArray(function(err, result) { if(err!=null){ debug(err); next(err); }else{ if(result==undefined){ res.sendStatus(404); }else{ res.send(200,result); } } }); }); module.exports = router;