MongoDb-$trunk管道帮助



我的数据:

[
{ total: 7421356 }, 
{ total: 79421356 },
{ total: 105457854 },
{ total: 1054578540 },
{ total: 10545785400 },
]

我想要一些类似的东西:

[
{ val: 7000000, count 1 },
{ val: 70000000, count 1 },
{ val: 100000000, count: 1 },
{ val: 1000000000, count 1 }
]

事实上,我使用这个管道:

{
$addFields: {
length: {
$multiply: [
{
$add: [
{
$strLenCP: {
$toString: "$val",
}
},
-1
]
},
-1
]
},
},
},
{
$project: {
value: {
$trunc: ["$val", "$length"],
},
_id: 0,
}
},
{
$group: {
_id: "$value",
count: {
$sum: 1
}
}
}, 
{
$project: {
value: "$_id",
count: 1, 
_id: 0,
}
},
{
$sort: {
value: 1
}
}

当我有像";10545785400";。他的长度似乎太长了,对于我的数据来说";7421356〃;他的结果现在是";0〃;。

我以为这些文件是单独通过管道的,但事实并非如此。我的第一个数据似乎使用了我最后一个数据的长度。

我希望有人能帮助我,即使我的解释不是很清楚。

编辑:这似乎是一个";类型";问题大于1.000.0000.0000的数据是双倍的,而不是int32编辑2:它与";24760000000";但不是用";25661674539";。我真的不明白为什么。它们以Double格式存储。

tl;dr

  • 添加$toLong:"$total"(从此处开始(

双打被转换为科学记数法,这是为了测量字符串长度,在大多数或所有字段中都是9。正如你所说,这些数字的类型是双重的。

请参阅此处的工作示例,在切断数据之前将字符串转换为数字:

db.collection.aggregate({
$addFields: {
length: {
$multiply: [
{
$add: [
{
$strLenCP: {
$toString: {
$toLong: "$total"
},

}
},
-2
]
},
-1
]
},

}
},
{
$project: {
value: {
$toLong:{
$trunc: [
"$total",
"$length"
],
}
},
_id: 0,

}
})

详细信息

  • 无法使用$toInt将这些大数字转换为int,因为这些数字很大。大于10^10的大型

相关内容

  • 没有找到相关文章

最新更新