MongoDB group() 函数中使用 Long 累加器代替 Double
我通过官方 Java API 使用 MongoDB。我可以存储和检索 Long 值,无需任何额外的努力。但是当我尝试使用group()
函数累积这些值时,JavaScript解释器将所有内容转换为双精度数,最终结果是双精度数。
这是我的组命令:
{
...
initial: { count: 0 },
reduce: "function (o, a) { a.count += o.count; }"
}
有没有办法告诉解释器 count
实际上是一个 Long?像 count: 0L
或 count: Long(0)
之类的东西?还是应该在Java端做积累?
I am using MongoDB via official Java API. I can store and retrive Long values without any extra effort. But when I try to accumulate these values using group()
function, JavaScript interpreter converts everything into Doubles and the final result ends up being a Double.
Here is my group command:
{
...
initial: { count: 0 },
reduce: "function (o, a) { a.count += o.count; }"
}
Is there a way to tell the interpreter that count
is in fact a Long? Something like count: 0L
or count: Long(0)
? Or should I do the accumulation on Java side?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为group命令实际上运行map/reduce,而map/reduce是一个javascript。在 javascript 中,默认数字类型是 double,因此它返回 double。
因此,如果您想在组命令结果中看到 long,您可以用
NumberLong(..)
包装您的数字:未对此进行测试,但几乎可以肯定它应该有效。
This is because group command actually run map/reduce, and map/reduce is a javascript. In the javascript default number type is a double, because of this it return doubles.
So you can probably wrap your numbers with
NumberLong(..)
if you wanna see long in group command result:Not tested this, but almost sure that it should work.