Mongoose如何基于closeTime获取每个coin唯一值对应的最新文档
实现方案
当然可以实现该需求,你可以通过Mongoose的聚合查询完成,核心逻辑是排序后按coin分组取每组第一条记录。
前置优化建议(可选,推荐添加)
提前为coin和closeTime创建联合索引,可大幅提升查询效率,索引创建代码如下:
mySchema.index({ coin: 1, closeTime: -1 });
具体查询代码
const latestCoinRecords = await MyModel.aggregate([ // 1. 先按coin升序、closeTime倒序排列,保证每个coin的最新记录排在分组最前 { $sort: { coin: 1, closeTime: -1 } }, // 2. 按coin字段分组,取每组的第一条数据即为对应coin的最新文档 { $group: { _id: "$coin", latestRecord: { $first: "$$ROOT" } } }, // 3. 可选步骤:将存储最新文档的latestRecord字段平铺到返回结果根层级 { $replaceRoot: { newRoot: "$latestRecord" } } ])
自定义返回字段说明
如果你不需要返回完整文档,只需要特定字段,可以修改$group阶段的逻辑,按需指定要返回的字段即可,示例如下:
{ $group: { _id: "$coin", recordId: { $first: "$_id" }, closeTime: { $first: "$closeTime" }, volume: { $first: "$volume" } } }
内容的提问来源于stack exchange,提问作者Shubhankar Agrawal
相关产品推荐
相关产品推荐

