Skip to content

Instantly share code, notes, and snippets.

@serpent403
Last active December 23, 2015 22:29
Show Gist options
  • Save serpent403/6703883 to your computer and use it in GitHub Desktop.
Save serpent403/6703883 to your computer and use it in GitHub Desktop.
Mongodb Map Reduce Example
// Fetch average score and last answer grouped by visit_id field
db.feedbacks.insert({ "_id" : ObjectId("52419f0ae4b02f8c625a7ff1"), "feedback_question_id" : "52417f81e4b0b6ec25fdc988", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "52419c4ee4b07fbefee8803a", "score" : 4, "updated_at" : ISODate("2013-09-24T14:17:46Z"), "created_at" : ISODate("2013-09-24T14:17:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("52419f0ae4b02f8c625a7ff2"), "feedback_question_id" : "52417f88e4b0b6ec25fdc98a", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "52419c4ee4b07fbefee8803a", "score" : 4, "updated_at" : ISODate("2013-09-24T14:17:46Z"), "created_at" : ISODate("2013-09-24T14:17:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("52419f0ae4b02f8c625a7ff3"), "feedback_question_id" : "52417f8de4b091d72db45521", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "52419c4ee4b07fbefee8803a", "score" : 2, "updated_at" : ISODate("2013-09-24T14:17:46Z"), "created_at" : ISODate("2013-09-24T14:17:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("52419f0be4b02f8c625a7ff4"), "feedback_question_id" : "52417f9ae4b0b6ec25fdc98c", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "52419c4ee4b07fbefee8803a", "answer" : "super service. totally loved it! <3", "updated_at" : ISODate("2013-09-24T14:17:47Z"), "created_at" : ISODate("2013-09-24T14:17:47Z") });
db.feedbacks.insert({ "_id" : ObjectId("5241a065e4b02f8c625a7ffe"), "feedback_question_id" : "52417f81e4b0b6ec25fdc988", "rater_id" : "5159b708e4b071cc919e634e", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5241a020e4b044fb9f99c458", "score" : 5, "updated_at" : ISODate("2013-09-24T14:23:33Z"), "created_at" : ISODate("2013-09-24T14:23:33Z") });
db.feedbacks.insert({ "_id" : ObjectId("5241a065e4b02f8c625a7fff"), "feedback_question_id" : "52417f88e4b0b6ec25fdc98a", "rater_id" : "5159b708e4b071cc919e634e", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5241a020e4b044fb9f99c458", "score" : 3, "updated_at" : ISODate("2013-09-24T14:23:33Z"), "created_at" : ISODate("2013-09-24T14:23:33Z") });
db.feedbacks.insert({ "_id" : ObjectId("5241a065e4b02f8c625a8000"), "feedback_question_id" : "52417f8de4b091d72db45521", "rater_id" : "5159b708e4b071cc919e634e", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5241a020e4b044fb9f99c458", "score" : 3, "updated_at" : ISODate("2013-09-24T14:23:33Z"), "created_at" : ISODate("2013-09-24T14:23:33Z") });
db.feedbacks.insert({ "_id" : ObjectId("5241a065e4b02f8c625a8001"), "feedback_question_id" : "52417f9ae4b0b6ec25fdc98c", "rater_id" : "5159b708e4b071cc919e634e", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5241a020e4b044fb9f99c458", "answer" : "nice quick service. simply love this place.", "updated_at" : ISODate("2013-09-24T14:23:33Z"), "created_at" : ISODate("2013-09-24T14:23:33Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242ad82e4b08bf2a0eaa46c"), "feedback_question_id" : "52417f81e4b0b6ec25fdc988", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 4, "updated_at" : ISODate("2013-09-25T09:31:46Z"), "created_at" : ISODate("2013-09-25T09:31:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242ad82e4b08bf2a0eaa46d"), "feedback_question_id" : "52417f88e4b0b6ec25fdc98a", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 4, "updated_at" : ISODate("2013-09-25T09:31:46Z"), "created_at" : ISODate("2013-09-25T09:31:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242ad82e4b08bf2a0eaa46e"), "feedback_question_id" : "52417f8de4b091d72db45521", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 4, "updated_at" : ISODate("2013-09-25T09:31:46Z"), "created_at" : ISODate("2013-09-25T09:31:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242ad82e4b08bf2a0eaa46f"), "feedback_question_id" : "52417f9ae4b0b6ec25fdc98c", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "answer" : "", "updated_at" : ISODate("2013-09-25T09:31:46Z"), "created_at" : ISODate("2013-09-25T09:31:46Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242adf2e4b08bf2a0eaa471"), "feedback_question_id" : "52417f81e4b0b6ec25fdc988", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 3, "updated_at" : ISODate("2013-09-25T09:33:38Z"), "created_at" : ISODate("2013-09-25T09:33:38Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242adf2e4b08bf2a0eaa472"), "feedback_question_id" : "52417f88e4b0b6ec25fdc98a", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 4, "updated_at" : ISODate("2013-09-25T09:33:38Z"), "created_at" : ISODate("2013-09-25T09:33:38Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242adf2e4b08bf2a0eaa473"), "feedback_question_id" : "52417f8de4b091d72db45521", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "score" : 2, "updated_at" : ISODate("2013-09-25T09:33:38Z"), "created_at" : ISODate("2013-09-25T09:33:38Z") });
db.feedbacks.insert({ "_id" : ObjectId("5242adf2e4b08bf2a0eaa474"), "feedback_question_id" : "52417f9ae4b0b6ec25fdc98c", "rater_id" : "506003b7047e9d38ee5b32ad", "merchant_id" : "52416008e4b02f4f07f78e53", "visit_id" : "5242a043e4b0e96d22bdd115", "answer" : "test", "updated_at" : ISODate("2013-09-25T09:33:38Z"), "created_at" : ISODate("2013-09-25T09:33:38Z") });
var mapFunction = function() {
var value = { score: this.score, answer: this.answer };
emit(this.visit_id, value);
};
var reduceFunction = function(keyVisitId, values) {
var reduceVal = { avg: null, answer: null };
var sum = 0;
var count = 0;
var answers = new Array();
var score;
var answer;
for(var i in values){
score = values[i].score;
answer = values[i].answer;
if(score != null){
sum += score;
count += 1;
}
if(answer != null){
answers.push(answer);
}
}
var avg = (sum/count);
reduceVal.avg = avg;
reduceVal.answer = answers[answers.length - 1];
return reduceVal;
};
var res = db.feedbacks.mapReduce(mapFunction, reduceFunction, { query: { merchant_id: '52416008e4b02f4f07f78e53' }, out: { inline: 1 } });
res.find();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment