我通过官方Java API使用MongoDB。我可以毫不费力地存储和检索Long值。但是当我尝试使用group()
函数累积这些值时,JavaScript解释器会将所有内容转换为双打,最终结果最终为Double。
这是我的群组命令:
{
...
initial: { count: 0 },
reduce: "function (o, a) { a.count += o.count; }"
}
有没有办法告诉口译员count
实际上是长的?像count: 0L
或count: Long(0)
之类的东西?或者我应该在Java端进行积累吗?
答案 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); }"
}
没有对此进行测试,但几乎可以肯定它应该有效。