2012-02-16 37 views
2

我通过官方Java API使用MongoDB。我可以无需额外的努力就可以存储和修改Long值。但是,当我尝试使用group()函数来累积这些值时,JavaScript解释器会将所有内容都转换为双精度,并且最终结果为双精度。在MongoDB group()函数中长累加器而不是Double Double

这里是我组命令:

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

有没有办法来告诉解释说count实际上是一个长?像count: 0Lcount: Long(0)?或者我应该在Java方面进行积累?

回答

2

这是因为group命令实际上运行map/reduce,而map/reduce是一个javascript。在JavaScript默认数字类型是双重的,因为它返回双打。

所以,你也许可以与NumberLong(..)包裹你的号码,如果你想看到长在group命令结果:

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

没测试过这一点,但几乎可以肯定,它应该工作。

+0

感谢您的回答。不幸的是'NumberLong'没有工作:''ReferenceError:NumberLong没有定义'“。这很奇怪,因为MongoDB文档本身提到它:http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions – 2012-02-16 16:26:25

+0

@EserAygün:你可以尝试使用m/r而不是group,然后在内部尝试mongodb外壳,用于识别驱动程序或mongodb中的问题。 – 2012-02-16 16:31:12

+0

啊!事实证明,我已经安装了1.2.2版本。这可能就是为什么它不起作用。再次感谢! – 2012-02-16 16:32:54

相关问题