在我的文档中,十进制值存储为String(因为我的Java中的BigDecimal转换为String)。当我一次查看一个文档时,这是完全正常的。但是,我要求它们在聚合目的期间被视为Double(例如,$ sum)。
在我的聚合管道中,有什么方法可以在$ project操作(或其他)期间将String转换为Double。因此,我的连续管道将在Double字段上进行$ sum。
我没有考虑将它们存储为Double的选项,因为我需要保留每个文档的精度,但如果在聚合操作期间精度丢失,我没问题。
答案 0 :(得分:2)
没有运营商在汇总管道中进行转换。是否可以将两个不同的值存储为BigDecimal / String,另一个值存储为double / float值?如果您可以忽略由浮点值引起的剥落,那么这可能是一个快速而肮脏的选项。
答案 1 :(得分:1)
您可以使用$toDouble
,这实际上是$convert
与def 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"
}
}
}
])
聚合管道的其他阶段可以使用它的地方。
答案 2 :(得分:0)
Mongodb 4.0版在聚合管道中引入了$toInt
运算符。您可以使用它轻松地从字符串转换为数字。
链接到文档:https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/