如何在Mongoose中获取去重指定字段及对应单条关联image数据
解决方案
方法1:使用MongoDB聚合管道(推荐)
直接使用$group聚合阶段即可实现需求,查询语句如下:
db.你的集合名.aggregate([ { $group: { _id: "$category", // 取当前分类分组下任意一张图片,$first取分组第一条的image值,也可替换为$last image: { $first: "$image" } } }, { // 调整输出字段符合你的要求 $project: { _id: 0, category: "$_id", image: 1 } } ])
说明:如果需要每个分类随机返回一张图片,可以在$group阶段前增加{ $sample: { size: 总数据量 } }打乱数据顺序即可,适合数据量不大的场景。
方法2:小数据集简易实现
如果你的集合数据量很小,也可以分两步查询实现:
// 第一步:查询所有不重复的分类 const categoryList = await db.你的集合名.distinct('category') // 第二步:遍历分类逐个查询对应图片 const result = await Promise.all( categoryList.map(async (cate) => { const record = await db.你的集合名.findOne({ category: cate }, { projection: { image: 1, _id: 0 } }) return { category: cate, image: record.image } }) )
注意:该方法需要多次查询数据库,数据量大时性能很差,优先选择聚合方案。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

