首页 > 解决方案 > C#中按第一项分组的MongoDb数据查询

问题描述

我想使用 C# 在 mongodb 中运行一个查询,即 MongoDB 有一个类似的数据

{name: Mr X, submitted_date: 20210821},
{name: Mr Y, submitted_date: 20210920},
{name: Mr X, submitted_date: 20211010},
{name: Mr Y, submitted_date: 20210317},
{name: Mr Z, submitted_date: 20210903}

我想运行一个查询,它会返回,

{name: Mr X, submitted_date: 20211010},
{name: Mr Y, submitted_date: 20210920},
{name: Mr Z, submitted_date: 20210903}

表示根据最新提交的日期按结果分组

我已经用 C# 编写了这段代码。但无法弄清楚如何按名称获取最新提交的值和组。

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

//Should be something for my expected result
            return _collection.Find(filter).Sort(sort).ToList();
        }

标签: c#asp.netmongodb

解决方案


使用这个聚合

db.collection.aggregate([
  {
    $sort: {
      submitted_date: -1
    }
  },
  {
    "$group": {
      "_id": "$name",
      "submitted_date": {
        $first: "$submitted_date"
      }
    }
  },
  {
    "$project": {
      name: "$_id",
      submitted_date: 1,
      _id: 0
    }
  }
])

https://mongoplayground.net/p/Q_5ySZlgDOZ


推荐阅读