我有一个存储搜索查询日志的集合。它的两个主要属性是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" }
答案 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。