2011-11-17 2 views
3

에서MongoDB를 : JS 오류 : 나는 몽고를 통해 그룹 명령을 실행하려고 메모리

db.contract.group({ 
    key:{id: 1}, 
    initial: {v: []}, 
    reduce: function(obj, prev){ 
    prev.v.push(obj.name) 
    } 
}); 

쉘 및 클라이언트

Thu Nov 17 12:12:49 uncaught exception: group command failed: { 
    "errmsg" : "exception: JS_NewObject failed: toJSObject2", 
    "code" : 13072, 
    "ok" : 0 
} 

및 mongod 로그에 다음과 같은 오류를 참조하면

다음 말한다
Thu Nov 17 12:12:17 [initandlisten] connection accepted from 127.0.0.1:58509 #1 
Thu Nov 17 12:12:49 [conn1] JS Error: out of memory 
Thu Nov 17 12:12:49 [conn1] Assertion: 13072:JS_NewObject failed: toJSObject2 
0x10008de9b 0x1001565bd 0x100156c9e 0x10037011e 0x10037204c 0x10034c4d6 0x10034d877 0x100180cc4 0x100184649 0x1002b9e89 0x1002c3f18 0x100433888 0x100446d74 0x7fff86e00fd6 0x7fff86e00e89 
0 mongod        0x000000010008de9b _ZN5mongo11msgassertedEiPKc + 315 
1 mongod        0x00000001001565bd _ZN5mongo9Convertor10toJSObjectEPKNS_7BSONObjEb + 1229 
2 mongod        0x0000000100156c9e _ZN5mongo7SMScope9setObjectEPKcRKNS_7BSONObjEb + 78 
3 mongod        0x000000010037011e _ZN5mongo12GroupCommand5groupESsRKSsRKNS_7BSONObjES3_SsSsPKcS3_SsRSsRNS_14BSONObjBuilderE + 2110 
4 mongod        0x000000010037204c _ZN5mongo12GroupCommand3runERKSsRNS_7BSONObjERSsRNS_14BSONObjBuilderEb + 3676 
5 mongod        0x000000010034c4d6 _ZN5mongo11execCommandEPNS_7CommandERNS_6ClientEiPKcRNS_7BSONObjERNS_14BSONObjBuilderEb + 1350 
6 mongod        0x000000010034d877 _ZN5mongo12_runCommandsEPKcRNS_7BSONObjERNS_10BufBuilderERNS_14BSONObjBuilderEbi + 2151 
7 mongod        0x0000000100180cc4 _ZN5mongo11runCommandsEPKcRNS_7BSONObjERNS_5CurOpERNS_10BufBuilderERNS_14BSONObjBuilderEbi + 52 
8 mongod        0x0000000100184649 _ZN5mongo8runQueryERNS_7MessageERNS_12QueryMessageERNS_5CurOpES1_ + 10585 
9 mongod        0x00000001002b9e89 _ZN5mongo13receivedQueryERNS_6ClientERNS_10DbResponseERNS_7MessageE + 569 
10 mongod        0x00000001002c3f18 _ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_8SockAddrE + 1528 
11 mongod        0x0000000100433888 _ZN5mongo10connThreadEPNS_13MessagingPortE + 616 
12 mongod        0x0000000100446d74 thread_proxy + 132 
13 libSystem.B.dylib     0x00007fff86e00fd6 _pthread_start + 331 
14 libSystem.B.dylib     0x00007fff86e00e89 thread_start + 13 
Thu Nov 17 12:12:49 [conn1] query staging.$cmd ntoreturn:1 command: { group: { key: { asset_id: 1.0 }, initial: { v: {} }, ns: "contract", $reduce: function (obj, prev) { 
    prev.v.push(obj.name); 
} } } reslen:119 21013ms 

가상 메모리가 무제한인지 확인하려고 시도했으며

입니다.
bash-3.2$ ulimit -a | egrep virtual\|open 
open files      (-n) 256 
virtual memory   (kbytes, -v) unlimited 

은 그래서

감사합니다이 문제를 해결하는 방법을 잘 모르겠습니다

답변

2

몽고 메모리에 그룹화됩니다, 그래서 당신은 많은 다른 값을 가진 큰 데이터베이스가있는 경우 아이디 일들이 너무 큰 얻을 수 있습니다에 대한 .

또한 하나의 배열에 주어진 id의 모든 이름을 쌓아 올리고 있습니다. Mongo의 최대 문서 크기에는 제한이 있기 때문에 주어진 id에 대한 문서가 여러 개있는 경우 메모리 부족 오류의 원인이 될 수 있습니다.

해결책은 map/reduce를 대신 사용하는 것입니다.

+0

이 작업은 매우 원활합니다. 당신의 제안에 감사드립니다 @StefanMK – daydreamer

관련 문제