聚合管道期间MongoDB字符串到Double的转换



在我的文档中,十进制值存储为String(因为我在Java中的BigDecimal转换为String)。当我一次查看一个文档时,这是完全可以的,也是必需的。然而,我要求在聚合过程中将它们视为Double(例如$sum)。

有没有一种方法可以让我在聚合管道的$project操作期间(或以其他方式)将String转换为Double。这样,我的连续管道将在Double字段上执行$sum

我不考虑将它们存储为Double的选项,因为我需要保留每个文档的精度,但如果在聚合操作中丢失精度,我可以。

聚合管道中没有用于进行转换的运算符。是否可以存储两个不同的值,一个作为BigDecimal/String,另一个作为double/foat值?如果你可以忽略浮点值导致的片状,这可能是一个快速而肮脏的选择。

您可以使用$toDouble,它本质上是$convertto: "double" 的短手

假设我们有一份文件;

{
    "str": "3.66"
}

并将CCD_ 15的值转换为CCD_;

db.collection.aggregate([
  {
    $addFields: {
      double: {
        $toDouble: "$str"
      }
    }
  }
])

将导致;

{
    "str": "3.66",
    "double": 3.66
}

它可以由聚合管道的其他阶段使用。

检查Mongo Playground

Mongodb 4.0版在聚合管道中引入了$toInt运算符。您可以使用它轻松地从字符串转换为数字。文档链接:https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/

最新更新