MongoDB按条件查询分组最多N条记录,fruit分类返回全部匹配数据
MongoDB单条查询实现分类差异化返回解决方案
实现思路
使用聚合管道的$facet运算符并行处理不同分类的查询逻辑,分别适配fruit分类的全量返回规则和其他分类的分组限流规则,最后直接输出要求的嵌套格式,无需额外二次处理。
完整查询代码
db.collection.aggregate([ // 预过滤指定分类,降低后续计算开销 { $match: { category: { $in: ["fruit", "fresh-food", "vegetable"] } } }, // 分通道处理不同分类的差异化规则 { $facet: { // fruit分类直接返回所有匹配记录 "fruit": [ { $match: { category: "fruit" } } ], // fresh-food分类按用户分组,每组最多返回10条 "fresh-food": [ { $match: { category: "fresh-food" } }, { $group: { _id: "$userId", data: { $push: "$$ROOT" } } }, { $project: { _id: 0, userId: "$_id", data: { $slice: ["$data", 10] } } } ], // vegetable分类按用户分组,每组最多返回10条 "vegetable": [ { $match: { category: "vegetable" } }, { $group: { _id: "$userId", data: { $push: "$$ROOT" } } }, { $project: { _id: 0, userId: "$_id", data: { $slice: ["$data", 10] } } } ] } } ])
逻辑说明
- 所有分类硬编码在查询中,符合需求要求
- 如需调整非fruit分类的单用户返回条数,直接修改
$slice的第二个参数即可 - 输出结构完全匹配要求的返回格式,无需额外代码处理结果
内容的提问来源于stack exchange,提问作者Tunz Daoz
相关产品推荐
相关产品推荐

