gpt4 book ai didi

mongodb - 按舍入值键聚合文档

转载 作者:可可西里 更新时间:2023-11-01 10:27:56 25 4
gpt4 key购买 nike

示例文档

[
{
value: 207.9
},
{
value: 208.1
},
{
value: 202.1
},
{
value: 201.9
}
]

如何使用 MongoDB 的聚合框架将文档分组到彼此在数值范围内的集群中?您如何将示例文档分成两个单独的组,一组包含值为 207.9 和 208.1 的文档,另一组包含值为 202.1 和 201.9 的文档?

我不确定 _id 是什么,因为分组不是静态值。预期的输出看起来像

[
{
_id: ?
avg: 208,
count: 2
},
{
_id: ?
avg: 202,
count: 2
}
]

最佳答案

你可以,但这取决于你如何实现数学的小数点精度。

例如对于单点精度,乘以 10:

db.items.aggregate([
{ "$group": {
"_id": {
"$add": [
{ "$subtract": [
"$value",
{ "$mod": [ "$value", 1 ] }
]},
{ "$cond": [
{ "$lt": [
{ "$mod": [
{ "$multiply": [ "$value", 10 ] },
10
]},
5
]},
0,
1
]}
]
},
"count": { "$sum": 1 }
}}
])

$mod$multiply操作将第一个小数转换为 1 到 10 之间的数字。如果该值小于 5,则返回 0,否则返回 1,然后添加到原始数字的四舍五入底数。

给出结果:

{ "_id" : 202, "count" : 2 }
{ "_id" : 208, "count" : 2 }

只需将数字乘以 10 即可更改结果的精度。

或者,如果您根本不关心精度,可以缩短它:

db.items.aggregate([
{ "$group": {
"_id": {
"$add": [
{ "$subtract": [
"$value",
{ "$mod": [ "$value", 1 ] }
]},
{ "$cond": [
{ "$lt": [
{ "$mod": [ "$value", 1 ] },
0.5
]},
0,
1
]}
]
},
"count": { "$sum": 1 }
}}
])

关于mongodb - 按舍入值键聚合文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31711830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com