2
votes

I have a collection that stores search query logs. It's two main attributes are user_id and search_query. user_id is null for a logged out user. I am trying to run a mapreduce job to find out the count and terms per user.

var map = function(){
  if(this.user_id !== null){
    emit(this.user_id, this.search_query);
  }
}
var reduce = function(id, queries){
  return Array.sum(queries + ",");
}
db.searchhistories.mapReduce(map,
  reduce,
  {
    query: { "time" : {
                        $gte :  ISODate("2013-10-26T14:40:00.000Z"),
                        $lt  :  ISODate("2013-10-26T14:45:00.000Z")
                       }
           },
    out : "mr2"
  }
)

throws the following exception

Wed Nov 27 06:00:07 uncaught exception: map reduce failed:{
        "errmsg" : "exception: assertion src/mongo/db/commands/mr.cpp:760",
        "code" : 0,
        "ok" : 0
}

I looked at mr.cpp L#760 but could not gather any vital information. What could be causing this?

My Collection has values like

> db.searchhistories.find()
{ "_id" : ObjectId("5247a9e03815ef4a2a005d8b"), "results" : 82883, "response_time" : 0.86, "time" : ISODate("2013-09-29T04:17:36.768Z"), "type" : 0, "user_id" : null, "search_query" : "awareness campaign" }
{ "_id" : ObjectId("5247a9e0606c791838005cba"), "results" : 39545, "response_time" : 0.369, "time" : ISODate("2013-09-29T04:17:36.794Z"), "type" : 0, "user_id" : 34225174, "search_query" : "eficaz eficiencia efectividad" }
1
Which mongodb version is this? - Derick
Mongo v2.2.1. I am trying to run it on a slave node. - pr4n

1 Answers

2
votes

Looking at the docs I could see that this is not possible in the slave. It will work perfectly fine in the master though. If you still want to use the slave then you have to use the following syntax.

db.searchhistories.mapReduce(map, 
 reduce,
  {
    query: { "time" : {
                    $gte :  ISODate("2013-10-26T14:40:00.000Z"),
                    $lt  :  ISODate("2013-10-26T14:45:00.000Z")
                   }
       },
    out : { inline : 1 }
 }
)

** Ensure that the output document size does not exceed 16MB limit while using inline function.