按舍入值键聚合文档
Aggregate documents by a Rounded value Key
示例文档
[
{
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
and $multiply
操作将第一个小数转换为 1 到 10 之间的数字。如果该值小于 5,则 return 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 }
}}
])
示例文档
[
{
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
and $multiply
操作将第一个小数转换为 1 到 10 之间的数字。如果该值小于 5,则 return 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 }
}}
])