Software versions:
mongod 1.8.2
node 1.4.5
node-mongodb-native
A node.js script node_mongodb_log_app.js is shown below.
GLOBAL.DEBUG = true; var sys = require('sys'); var Db = require('mongodb').Db, Connection = require('mongodb').Connection, Server = require('mongodb').Server, BSON = require('mongodb').BSONNative; var db = new Db('logdb', new Server('127.0.0.1', 27017, {}), {native_parser: true}); var filter = null; var lon = (process.ARGV[2]) ? Number(process.ARGV[2]): null; var lat = (process.ARGV[3]) ? Number(process.ARGV[3]): null; if(lat != null && lon != null){ filter = { query: { loc : { $near: [lon, lat]}}}; sys.puts(sys.inspect(filter)); } db.open(function(error, db) { var map_request_size = function(){ emit(1, this.size); } var reduce = function (k, vals) { var sum = 0; vals.forEach(function (v) {sum += v;}); return sum; } // query all results, total bandwith db.collection('logentry', function(error, collection){ if(filter != null){ collection.mapReduce(map_request_size, reduce, filter, function(error, collection){ collection.find(function(error, cursor){ cursor.each(function(error, mrdoc){ if(mrdoc != null){ sys.puts(mrdoc.value); } db.close(); }); }); }); } else{ collection.mapReduce(map_request_size, reduce, function(error, collection){ collection.find(function(error, cursor){ cursor.each(function(error, mrdoc){ if(mrdoc != null){ sys.puts(mrdoc.value); } db.close(); }); }); }); } }); });
We want to accumulate all file download into a single number of bytes. For that we execute the script without parameters:
$ node node_mongodb_log_app.js
204612741925
If we want to analyze consumption near a geographic location, we issue a call like this:
$ node node_mongodb_log_app.js -108 32.6
{ query: { loc: { '$near': [Object] } } }
30435795