【发布时间】:2017-01-27 15:10:57
【问题描述】:
我需要从查询中获取前 N 个项目,并将所有其他项目(不在 N 前)分组到一个附加元素中。
例如,考虑包含以下文档的集合:
{user: "Ana", post: "A" },
{user: "Ana", post: "B" },
{user: "Ana", post: "C" },
{user: "Ana", post: "D" },
{user: "Bruce", post: "E" },
{user: "Bruce", post: "F" },
{user: "Bruce", post: "G" },
{user: "Cami", post: "H" },
{user: "Cami", post: "I" },
{user: "John", post: "J" },
{user: "Peter", post: "K" },
{user: "Helena", post: "L" }
我希望获得贡献最多的 2 个用户,并将所有其他用户汇总到一个额外的输出项中。例如:
{user: "Ana", count: 4},
{user: "Bruce", count: 3},
{user: "All others guys", count: 5}
现在我正在使用“聚合”功能:
db.MyTest.aggregate(
[
{
$group: {
"_id": "$user",
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1,
userName: 1
}
}
]
);
我不知道如何对待“所有其他人”项目。我的函数返回以下结果:
{_id: "Ana", count: 4},
{_id: "Bruce", count: 3},
{_id: "Cami", count: 2},
{_id: "John", count: 1},
{_id: "Peter", count: 1},
{_id: "Helena", count: 1}
知道如何通过单个查询直接在 mongo 中执行此操作吗?
P.S.:我使用的是 Mongo 3.2.11。
【问题讨论】:
-
您的 MongoDB 服务器版本是多少?另外,您能否更新您的问题以显示您到目前为止所做的工作?
-
嘿chridam,我用你的建议更新了这个问题。谢谢!
标签: mongodb mongodb-query aggregation-framework