Skip to content

Instantly share code, notes, and snippets.

@maggiben
Created April 3, 2014 21:18
Show Gist options
  • Save maggiben/9963124 to your computer and use it in GitHub Desktop.
Save maggiben/9963124 to your computer and use it in GitHub Desktop.
MongoDB Map Reduce for LOG table
///////////////////////////////////////////////////////////////////////////////
// Shema //
///////////////////////////////////////////////////////////////////////////////
var Logs = new Schema({
ip: { type: String, required: true, trim: true },
query: {type: Object},
requestHeaders: {type: Object},
requestBody: {type: Object},
responseHeaders: {type: Object},
responseBody: {type: Object},
data: {type: Buffer, required: false},
responseStatus: {type: Number, default: 0, required: true},
status: {type: Number, default: 0, required: true},
date: { type: Date, default: Date.now },
time: {type: Number, default: 0, required: true},
method: { type: Schema.Types.ObjectId, ref: 'Methods' },
digestor: { type: Schema.Types.ObjectId, ref: 'Methods' }
});
///////////////////////////////////////////////////////////////////////////////
// Map Reduce //
///////////////////////////////////////////////////////////////////////////////
var mapF = function() {
emit(this.ip, this.time);
};
var reduceF = function(keyCustId, times) {
return {
"sum": Array.sum(times),
"avg": Array.avg(times),
"stdDev": Array.stdDev(times)
}
};
//db.logs.find({date: {$gte: ISODate("2014-03-16T03:00:00.000Z"), $lt: ISODate("2014-03-23T03:00:00.000Z")}}).limit(10)
db.logs.mapReduce(
mapF,
reduceF,
{ out: { inline: 1 } }
)
// Return times greater than 3
db.logs.aggregate({
$group: {
_id: "$digestor",
totalTimes: { $sum: "$time" }
}
}, {
$match: {
totalTimes: { $gte: 3 }
}
});
db.logs.find({
"time": {"$gte": 3}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment