MongoDB group()函数中的long accumulator而不是Double

时间:2012-02-16 15:44:34

标签: java mongodb double long-integer

我通过官方Java API使用MongoDB。我可以毫不费力地存储和检索Long值。但是当我尝试使用group()函数累积这些值时,JavaScript解释器会将所有内容转换为双打,最终结果最终为Double。

这是我的群组命令:

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

有没有办法告诉口译员count实际上是长的?像count: 0Lcount: Long(0)之类的东西?或者我应该在Java端进行积累吗?

1 个答案:

答案 0 :(得分:2)

这是因为group命令实际上运行map / reduce,而map / reduce是一个javascript。在javascript中,默认数字类型是double,因此返回double。

所以如果你想在群组命令结果中看到多长的话,你可以用NumberLong(..)包裹你的数字:

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

没有对此进行测试,但几乎可以肯定它应该有效。