在我的文档中,十进制值存储为String
(因为我在Java中的BigDecimal
转换为String
)。当我一次查看一个文档时,这是完全可以的,也是必需的。然而,我要求在聚合过程中将它们视为Double
(例如$sum
)。
有没有一种方法可以让我在聚合管道的$project
操作期间(或以其他方式)将String
转换为Double
。这样,我的连续管道将在Double
字段上执行$sum
。
我不考虑将它们存储为Double
的选项,因为我需要保留每个文档的精度,但如果在聚合操作中丢失精度,我可以。
聚合管道中没有用于进行转换的运算符。是否可以存储两个不同的值,一个作为BigDecimal/String,另一个作为double/foat值?如果你可以忽略浮点值导致的片状,这可能是一个快速而肮脏的选择。
您可以使用$toDouble
,它本质上是$convert
与to: "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/