You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作MongoDB如何按name分组取每组最新submitted_date数据

解决方案

你需要使用MongoDB的聚合管道来实现分组取每组最新数据的逻辑,直接由数据库侧完成计算,性能远高于内存二次处理。修改后的代码如下:

public List<Customer> GetLatestCustomers(List<string> nameList)
{
    var filter = Builders<Customer>.Filter.Empty;
    if (nameList.Count > 0)
    {
        filter = filter & Builders<Customer>.Filter.In(x => x.name, nameList);
    }

    var aggregation = _collection.Aggregate()
        // 第一步:应用过滤条件,筛选符合要求的文档
        .Match(filter)
        // 第二步:按提交日期降序排序,保证每个name下最新的记录排在最前面
        .Sort(Builders<Customer>.Sort.Descending(x => x.submitted_date))
        // 第三步:按name分组,取每组第一个文档即最新记录
        .Group(x => x.name, g => new {
            Name = g.Key,
            LatestRecord = g.First()
        })
        // 第四步:投影为Customer结构,如需保留全部字段可直接写 .Project(x => x.LatestRecord)
        .Project(x => new Customer {
            name = x.Name,
            submitted_date = x.LatestRecord.submitted_date
            // 其他字段可在此处补充赋值
        });

    return aggregation.ToList();
}

逻辑说明

  • 聚合的Match阶段和原有Find的过滤逻辑完全等价,筛选规则不变
  • 你使用的yyyyMMdd格式日期不管是数字类型还是字符串类型,降序排序规则都符合业务要求,不需要额外做格式转换
  • 如果Customer类还有其他需要返回的字段,可直接简化投影逻辑返回分组内的最新完整文档,不需要逐个字段赋值

内容的提问来源于stack exchange,提问作者leo Ak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:36:03