【发布时间】:2020-08-25 21:33:45
【问题描述】:
在我的文档中,十进制值存储为String(因为我在Java 中将BigDecimal 转换为String)。当我一次查看一个文档时,这是完全可以的并且是必需的。但是,我要求在聚合期间将它们视为Double(例如$sum)。
有没有办法让我在聚合管道期间的$project 操作(或其他方式)期间将String 转换为Double。这样我的后续管道将在Double 字段上执行$sum。
我没有考虑将它们存储为 Double 的选项,因为我需要保留每个文档的精度,但如果在聚合操作期间精度丢失,我可以。
【问题讨论】:
-
简单地说,不可以。目前不能在聚合管道中进行投射。您能做的最好的事情就是将“整数/双精度”(后者是“某种”)转为字符串,并且使用
$substr非常隐晦。如果你现在真的需要“cating”,那么请改用 mapReduce。但是我在这里没有看到我们可以提供答案的用例或代码。如果要使用聚合管道,请将数据存储为双精度。更好的是,将数据存储为两个单独的数字类型。浮点数学 = 头痛。 -
另外 -- 投票this 以添加对小数/货币类型的支持。有人亲自告诉我这很重要,但我从未见过在实际问题上的任何动静。
-
你能检查我的答案吗? 5 年后,有一个更简单的解决方案可用 =)
标签: mongodb aggregation-framework