Mongo-db聚合-$push和$slice顶部结果



我的数据库中有以下文档:

{uid: 1, score: 10}
{uid: 2, score: 11}
{uid: 3, score: 1}
{uid: 4, score: 6}
{uid: 5, score: 2}
{uid: 6, score: 3}
{uid: 7, score: 8}
{uid: 8, score: 10}

我想按分数将它们分成几个桶,即:

(聚合中的存储桶名称([/tr>4
得分uids
[0,4)3,5,60
[4,7)4
[7,inf1,2,7,87

您可以使用$topN累加器,而不是$push,如下所示:

db.collection.aggregate([
{
"$bucket": {
"groupBy": "$score",
"boundaries": [
0,
4,
7
],
"default": 7,
"output": {
"total": {
"$sum": 1
},
"top_frustrated": {
"$topN": {
"n": 3,
"sortBy": {
"score": -1
},
"output": {
"uid": "$uid",
"score": "$score"
}
}
}
},  
}
},
])

游乐场链接。

这里唯一的问题是这个操作符存在于MongoDB 5.2及更高版本中。

对于旧版本,这将起作用:

db.collection.aggregate([
{
"$sort": {
score: -1
}
},
{
$bucket: {
groupBy: "$score",
boundaries: [
0,
4,
7
],
default: 7,
output: {
"total": {
$sum: 1
},
"top_frustrated": {
$push: {
"uid": "$uid",
"score": "$score"
}
},

},

}
},
{
"$project": {
total: 1,
top_frustrated: {
"$slice": [
"$top_frustrated",
3
]
}
}
}
])

游乐场链接。

最新更新