MongoDB + C#:如何查询所有标签并按使用频次降序排序
MongoDB查询:按标签使用频次从高到低统计所有标签
没问题,我帮你搞定这个标签统计的需求!你可以借助MongoDB的聚合框架来实现,具体的查询语句和逻辑拆解如下:
实现思路
要统计标签的使用频次并排序,核心需要三个步骤:
- 把每个文档中的
tags数组拆分成独立文档,让每个标签单独成为一条记录 - 按标签分组,统计每个标签的出现次数
- 按照统计的次数从高到低排序,最后按需调整输出格式
完整聚合查询语句
下面是可以直接运行的聚合查询,包含详细的阶段注释:
db.Sites.aggregate([ // 拆分tags数组,每个标签生成一条独立文档 { $unwind: "$tags" }, // 按标签分组,统计每个标签的出现次数 { $group: { _id: "$tags", count: { $sum: 1 } } }, // 按出现次数从高到低排序 { $sort: { count: -1 } }, // 调整输出格式,让结果更直观(可选) { $project: { _id: 0, tag: "$_id", count: 1 } } ])
查询结果说明
运行上述查询后,你会得到包含标签名称和对应频次的结果,完全符合你的需求:
[ { "tag": "Tag1", "count": 4 }, { "tag": "Tag3", "count": 3 }, { "tag": "Tag4", "count": 2 }, { "tag": "Tag2", "count": 1 } ]
可选:只返回标签名称列表
如果你只需要纯标签的排序列表,可以在聚合最后添加一个阶段,把标签收集成数组:
db.Sites.aggregate([ { $unwind: "$tags" }, { $group: { _id: "$tags", count: { $sum: 1 } } }, { $sort: { count: -1 } }, { $group: { _id: null, tags: { $push: "$_id" } } }, { $project: { _id: 0, tags: 1 } } ])
这个查询会直接返回:
{ "tags": ["Tag1", "Tag3", "Tag4", "Tag2"] }
内容的提问来源于stack exchange,提问作者jack.pop
相关产品推荐
相关产品推荐

