在MongoDB group()函数中长累加器而不是Double Double
问题描述:
我通过官方Java API使用MongoDB。我可以无需额外的努力就可以存储和修改Long值。但是,当我尝试使用group()
函数来累积这些值时,JavaScript解释器会将所有内容都转换为双精度,并且最终结果为双精度。在MongoDB group()函数中长累加器而不是Double Double
这里是我组命令:
{
...
initial: { count: 0 },
reduce: "function (o, a) { a.count += o.count; }"
}
有没有办法来告诉解释说count
实际上是一个长?像count: 0L
或count: Long(0)
?或者我应该在Java方面进行积累?
答
这是因为group命令实际上运行map/reduce,而map/reduce是一个javascript。在JavaScript默认数字类型是双重的,因为它返回双打。
所以,你也许可以与NumberLong(..)
包裹你的号码,如果你想看到长在group命令结果:
{
...
initial: { count: new NumberLong(0) },
reduce: "function (o, a) { a.count += new NumberLong(o.count); }"
}
没测试过这一点,但几乎可以肯定,它应该工作。
感谢您的回答。不幸的是'NumberLong'没有工作:''ReferenceError:NumberLong没有定义'“。这很奇怪,因为MongoDB文档本身提到它:http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions – 2012-02-16 16:26:25
@EserAygün:你可以尝试使用m/r而不是group,然后在内部尝试mongodb外壳,用于识别驱动程序或mongodb中的问题。 – 2012-02-16 16:31:12
啊!事实证明,我已经安装了1.2.2版本。这可能就是为什么它不起作用。再次感谢! – 2012-02-16 16:32:54