2013-11-27 3 views
2

검색 쿼리 로그를 저장하는 모음이 있습니다. 두 가지 주요 속성은 user_id와 search_query입니다. 로그 아웃 된 사용자의 경우 user_id는 null입니다. 나는 사용자 당 카운트와 용어를 찾기 위해 mapreduce 작업을 실행하려고합니다.mongo 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

어떤 mongodb 버전입니까? – Derick

+0

Mongo v2.2.1. 슬레이브 노드에서 실행하려고합니다. –

답변

2

같은 값이 있습니다. 그래도 마스터에서 완벽하게 작동합니다. 그래도 슬레이브를 사용하려면 다음 구문을 사용해야합니다.

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 제한을 초과하지 않는지 확인하십시오.

+0

오. 그게 내 문제를 해결해 줬어. 감사합니다 –

+0

"인라인 기능을 사용하는 동안 출력 문서 크기가 16MB 제한을 초과하지 않는지 확인하십시오." 이것은 내 문제였다. 컬렉션에 출력하여 해결 :'out : 'myCollection''. – Zugwalt