MongoDB字符串在聚合管道中进行双转换

时间:2014-04-28 11:13:12

标签: mongodb aggregation-framework

在我的文档中,十进制值存储为String(因为我的Java中的BigDecimal转换为String)。当我一次查看一个文档时,这是完全正常的。但是,我要求它们在聚合目的期间被视为Double(例如,$ sum)。

在我的聚合管道中,有什么方法可以在$ project操作(或其他)期间将String转换为Double。因此,我的连续管道将在Double字段上进行$ sum。

我没有考虑将它们存储为Double的选项,因为我需要保留每个文档的精度,但如果在聚合操作期间精度丢失,我没问题。

3 个答案:

答案 0 :(得分:2)

没有运营商在汇总管道中进行转换。是否可以将两个不同的值存储为BigDecimal / String,另一个值存储为double / float值?如果您可以忽略由浮点值引起的剥落,那么这可能是一个快速而肮脏的选项。

答案 1 :(得分:1)

您可以使用$toDouble,这实际上是$convertdef divisor() : limit = int(input('')) for num in range(limit) : i = 1 number = int(input('')) terminator = number count = 0 while( terminator > 0 ): count = count + 1 terminator = terminator // 10 if(count <= 100): print ('Case',num+1,':', end = '') while i <= number : if (number % i == 0): print(i, end=' ', flush=True) i = i + 1 print('') else: break divisor() 的简写

假设我们有一个文档;

to: "double"

并将{ "str": "3.66" } 的值转换为string;

double

将导致;

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

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

检查Mongo Playground

答案 2 :(得分:0)

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