mongo mapreduce中的断言异常

时间:2013-11-27 12:23:59

标签: mongodb mapreduce

我有一个存储搜索查询日志的集合。它的两个主要属性是user_id和search_query。对于已注销的用户,user_id为null。我正在尝试运行mapreduce作业来查找每个用户的计数和条款。

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"
  }
)

抛出以下异常

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
}

我查看mr.cpp L#760但无法收集任何重要信息。可能导致这种情况的原因是什么?

我的收藏品的价值如

> 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 个答案:

答案 0 :(得分:2)

查看文档我可以看到这在奴隶中是不可能的。它虽然可以在主人中完美地工作。如果您仍想使用slave,则必须使用以下语法。

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 }
 }
)

**确保在使用内联函数时输出文档大小不超过16MB。