MongoDB查询编写:用$in一次性获取指定商品列表的日期最新记录
按item分组取最新日期记录的MongoDB实现方案
可直接运行的查询语句
完全覆盖你提出的使用$in过滤、抓取每个匹配item最新条目需求的聚合查询如下:
db.collection.aggregate([ // 第一步:通过$in操作符过滤目标item范围的文档 { $match: { item: { $in: ["abc", "pop"] } } }, // 第二步:按date字段倒序排序,保证同item下最新文档排在组内最前 { $sort: { date: -1 } }, // 第三步:按item分组,取组内排序后的第一条完整文档 { $group: { _id: "$item", latestDocument: { $first: "$$ROOT" } } }, // 第四步:将完整文档映射为顶层结构,匹配原集合输出格式 { $replaceRoot: { newRoot: "$latestDocument" } } ])
执行效果说明
- 第一步过滤后仅保留item为abc、pop的相关记录,提前缩小数据处理范围
- 排序后同item的文档按时间从晚到早排列,避免分组时误取非最新记录
- 通过
$$ROOT直接获取文档全量字段,不需要逐字段映射原有结构,适配后续字段变更 - 最终输出结果和预期完全匹配:返回abc品类2014-02-15的记录、pop品类2014-02-16的最新记录
内容的提问来源于stack exchange,提问作者user6761456
相关产品推荐
相关产品推荐

