Skip to content

Instantly share code, notes, and snippets.

@bingomanatee
Created March 12, 2012 18:36
Show Gist options
  • Save bingomanatee/2023857 to your computer and use it in GitHub Desktop.
Save bingomanatee/2023857 to your computer and use it in GitHub Desktop.
How is my Map duty infecting my reduce output?
> db.summary.drop();
true
> my_map
function my_map() {
if (this.hasOwnProperty("uri") &&
this.uri.hasOwnProperty("path") && this.uri.path) {
var out = {ct:1, content:0};
if (this.hasOwnProperty("content")) {
out.content = this.content.length;
}
emit(this.uri.path, out);
}
}
> my_reduct
function my_reduct(key, val) {
var c = 0;
val.forEach(function (v) {c += v.content;});
return {content:c};
}
> db.messages.mapReduce(my_map, my_reduct, {out: {replace: "summary"}})
{
"result" : "summary",
"timeMillis" : 1986,
"counts" : {
"input" : 51518,
"emit" : 51518,
"reduce" : 1592,
"output" : 1109
},
"ok" : 1,
}
> db.summary.find();
{ "_id" : "/", "value" : { "content" : 7 } }
{ "_id" : "/admin/", "value" : { "content" : 8 } }
{ "_id" : "/admin/appointments", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/2461610/cancel", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/2461710", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/appointments/2461710/cancel", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/2474410/change_room", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/2476810/approve", "value" : { "content" : 48 } }
{ "_id" : "/admin/appointments/new", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/new_step2", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/new_step3", "value" : { "content" : 0 } }
{ "_id" : "/admin/appointments/new_step4", "value" : { "content" : 11 } }
{ "_id" : "/admin/appointments/search_appointment", "value" : { "content" : 1 } }
{ "_id" : "/admin/appointments/search_appointment.js", "value" : { "content" : 6 } }
{ "_id" : "/admin/appointments/slots", "value" : { "content" : 0 } }
{ "_id" : "/admin/comments", "value" : { "content" : 0 } }
{ "_id" : "/admin/comments/hide", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/comments/search_comment", "value" : { "content" : 0 } }
{ "_id" : "/admin/comments/search_comment.js", "value" : { "ct" : 1, "content" : 0 } }
has more
> it
{ "_id" : "/admin/comments/view_comment", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/audit_trails", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/billing", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/billing/internet_category", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/station_rule", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/visit_schedule", "value" : { "content" : 0 } }
{ "_id" : "/admin/facility/visit_schedule/rule_list", "value" : { "content" : 0 } }
{ "_id" : "/admin/game_managements", "value" : { "content" : 0 } }
{ "_id" : "/admin/gettingout_billings", "value" : { "content" : 0 } }
{ "_id" : "/admin/gettingout_billings/rate_settings", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/gettingout_billings/subscription_settings", "value" : { "content" : 0 } }
{ "_id" : "/admin/gettingout_billings/subscription_settings.js", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/gettingout_billings/update_auto_charge", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/internet_folders", "value" : { "content" : 0 } }
{ "_id" : "/admin/internet_folders/226310", "value" : { "content" : 12 } }
{ "_id" : "/admin/internet_folders/226310/enable_all", "value" : { "ct" : 1, "content" : 0 } }
{ "_id" : "/admin/internet_folders/228510", "value" : { "content" : 0 } }
{ "_id" : "/admin/internet_folders/228610", "value" : { "content" : 0 } }
{ "_id" : "/admin/internet_folders/230710", "value" : { "ct" : 1, "content" : 0 } }
has more
=begin
HERE IS MY RUBY MAP/REDUCE.
I have erased the destination collection "summary"
Note that the "ct" values from my MAP function are ending up in my output --
EVEN THOUGH THEY ARE NOT COMING FROM REDUCE!!!! WTF????
=end
map = <<-eos
function() {
if (this.hasOwnProperty('uri') && this.uri.hasOwnProperty('path') && this.uri.path){
var out = {ct: 1, content: 0};
if (this.hasOwnProperty('content')){
out.content = this.content.length;
}
emit (this.uri.path, out)
}
}
eos
reduce = <<-eos
function(key, val) {
var c = 0;
val.forEach(function(v){
c += v.content;
})
return {content: c}
}
}
eos
summary = @coll.map_reduce(map, reduce, {:out => {:replace => 'summary'}})
p "map reduced: #{summary.inspect}"
=begin
SAMPLE OUTPUT
> db.summary.find({"value.content": {"$gt": 0}});
{ "_id" : "/", "value" : { "content" : 1 } }
{ "_id" : "/admin/", "value" : { "content" : 8 } }
{ "_id" : "/admin/appointments/2476810/approve", "value" : { "content" : 16 } }
{ "_id" : "/admin/appointments/new_step4", "value" : { "content" : 11 } }
{ "_id" : "/admin/appointments/search_appointment.js", "value" : { "content" : 6 } }
{ "_id" : "/admin/internet_folders/226310", "value" : { "content" : 12 } }
{ "_id" : "/admin/members/4471410-mary-mack/appointments/slots", "value" : { "ct" : 1, "content" : 4 } }
{ "_id" : "/admin/members/4472610-dave-edelmate/appointments/slots", "value" : { "ct" : 1, "content" : 4 } }
{ "_id" : "/admin/members/4472710/search_message", "value" : { "ct" : 1, "content" : 8 } }
{ "_id" : "/admin/members/4472710/search_photo", "value" : { "content" : 8 } }
{ "_id" : "/admin/members/4473110/search_message", "value" : { "ct" : 1, "content" : 8 } }
{ "_id" : "/admin/members/4473110/search_photo", "value" : { "ct" : 1, "content" : 8 } }
{ "_id" : "/admin/members/4475310-free-visits/appointments/slots", "value" : { "ct" : 1, "content" : 4 } }
{ "_id" : "/admin/photos/29501/view", "value" : { "ct" : 1, "content" : 1 } }
{ "_id" : "/admin/photos/80710/approve", "value" : { "ct" : 1, "content" : 2 } }
{ "_id" : "/admin/photos/80810", "value" : { "content" : 1 } }
{ "_id" : "/admin/photos/80810/approve", "value" : { "ct" : 1, "content" : 2 } }
{ "_id" : "/admin/photos/81010", "value" : { "content" : 2 } }
{ "_id" : "/admin/photos/81010/approve", "value" : { "ct" : 1, "content" : 2 } }
{ "_id" : "/admin/photos/81110/approve", "value" : { "ct" : 1, "content" : 2 } }
=end
@bingomanatee
Copy link
Author

This is true EVEN IF I DO THE M/R on console!!!!! ?????

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment