2012-02-16 3 views
2

공식 Java API를 통해 MongoDB를 사용하고 있습니다. 여분의 노력없이 Long 값을 저장하고 검색 할 수 있습니다. 그러나 group() 함수를 사용하여이 값을 누적하려고하면 JavaScript 인터프리터가 모든 것을 Doubles로 변환하고 최종 결과가 Double이됩니다. count가 긴 사실에 있음을 인터프리터를 알 수있는 방법이Double in MongoDB group() function

{ 
    ... 
    initial: { count: 0 }, 
    reduce: "function (o, a) { a.count += o.count; }" 
} 

있습니까 : 여기

내 그룹 명령입니까? count: 0L 또는 count: Long(0)과 같은 것입니까? 아니면 자바 측에서 축적을해야합니까?

답변

2

이것은 그룹 명령이 실제로 map/reduce를 실행하고 map/reduce가 javascript이기 때문입니다. 자바 스크립트 기본 숫자 형식에서 double이기 때문에 두 배가됩니다.

{ 
    ... 
    initial: { count: new NumberLong(0) }, 
    reduce: "function (o, a) { a.count += new NumberLong(o.count); }" 
} 

이 테스트를하지만, 작동해야 거의 확실하지 : 당신은 그룹 명령 결과에 오랫동안보고 싶어 경우

그래서 당신은 아마 NumberLong(..)으로 번호를 포장 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 불행히도'NumberLong'은 작동하지 않았습니다 : "'ReferenceError : NumberLong is not defined'". MongoDB 문서 자체에서 언급하기 때문에 이상합니다. http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions –

+0

@ EserAygün : 그룹 대신 m/r을 사용하여 시도해 볼 수 있습니까? mongodb 쉘을 사용하여 드라이버 또는 mongodb에서 문제가되는 부분을 식별합니다. –

+0

아! 버전 1.2.2가 설치되어있는 것으로 나타났습니다. 아마도 그것이 작동하지 않는 이유 일 것입니다. 다시 한 번 감사드립니다! –