2016-10-03 3 views
2

mongo db의 두 객체 콜렉션을 비교해야합니다. 내 쉘 스크립트는 다음과 같습니다forEach는 mongodb의 모든 콜렉션을 반복하지 않습니다

//Both arrays have 367 pretty big objects. 
var list1 = db.collection1.find({..condition..}).toArray(); 
var list2 = db.collection2.find({..condition..}).toArray(); 

function compare(left, right){ 
    var l = left.data.NP; 
    var r = right.data.NP; 
    if(JSON.stringify(l) === JSON.stringify(r)){ 
     return 'Equal'; 
    } else { 
     return 'Not equal'; 
    } 
} 

list1.forEach(function(item, index){ 
    print(index, compare(item,list2[index])); 
}) 

나는 Robomongo에서이 스크립트를 실행합니다. 하지만 문제가 있습니다. 결과에서 367의 8 개 품목 만 인쇄되었다. Robomongo는 오류 메시지를 표시하지 않았습니다. 제가

내부의 foreach
print(item); 

을 사용하는 경우는 모두 잘 작동하고 모든 367 개체 인쇄 하였다. 또한 객체 비교를 위해 Deep Diff 라이브러리를 사용하려했지만 동일한 결과를 얻었습니다. 367 개에서 12 개 항목 만 인쇄되었습니다.

메모리 소비 문제는 생각하지만 Robomongo가 오류를 인쇄하지 않는 이유는 무엇인지 모릅니다.

커서 만 반복하려고했지만 도움이되지 않았습니다.

foreach가 모든 항목을 반복하지 못하고이를 고칠 수있는 이유는 무엇입니까?

[UPDATE 1] 난 Robomongo 단지 개방 탭에서 스크립트를 실행하는 경우는 102 개 소자를 인쇄하지만 동일한 탭 다시 실행할 때만 12 인쇄 언급 조사 몇 시간 후.

[업데이트 2] 나는 오류없이 네이티브 몽고 쉘 mongo.exe를 사용하여 스크립트를 실행하려고 및 인쇄 (367 개) 요소에서 100을 가지고

답변

4

[업데이트]

,536,913,632 10

시간 초과와 관련이있을 수 있습니다. Robomongo는 구성 파일에있는 15 초의 기본 시간 초과를 가지며 변경할 수 있습니다. 이 도움이 될 :

[업데이트-1]

버전 로보 3T에서 시작 - 1.1 (이전 Robomongo을), 쉘 타임 아웃 UI로 구성 할 수 있으며 또한이 문제가 발생하는 것을 방지하기 수정이있다. http://blog.robomongo.org/robomongo-is-robo-3t/#4a을 참조하십시오. 따라서 이전 버전의 경우 아래 설명 된대로 구성 파일을 변경할 필요가 없습니다. 1.1 이전 버전의

해결 솔루션 :

이 Robomongo가 닫혀 있는지 확인합니다. robomongo.json 구성 파일을 엽니 다.

[업데이트] : 최신 버전의 경우 Robomongo-Config-File-Guide에 대한 링크를 추가합니다.

Windows 
    0.9.x 
    C:\Users\<user>\.config\robomongo\0.9\robomongo.json 
    0.8.x 
    C:\Users\<user>\.config\robomongo\robomongo.json 
MAC 
    0.9.x 
    /Users/<user>/.config/robomongo/0.9/robomongo.json 
    0.8.x 
    /Users/<user>/.config/robomongo/robomongo.json  
Linux 
    0.9.x 
    /home/<user>/.config/robomongo/0.9/robomongo.json 
    0.8.x 
    /home/<user>/.config/robomongo/robomongo.json 
  1. 변경 초 높은 숫자를 "shellTimeoutSec"속성 값입니다. (예 : "shellTimeoutSec": 60)
  2. 구성 파일을 저장하고 Robomongo 앱을 다시 실행하십시오.
  3. 필요한 스크립트를 실행하십시오. 스크립트가 완전히 실행되지 않으면 shellTimeoutSec 값을 늘려보십시오.

참조 : https://github.com/paralect/robomongo/issues/1106#issuecomment-230258348

관련 문제