Understanding MongoDB Aggregate and GroupBy

本文关键字:GroupBy and Aggregate MongoDB Understanding | 更新日期: 2023-09-27 18:33:14

我正在尝试在MongoDB中进行查询,首先按id分组,然后按降序排序。我这里有一个功能性 LINQ 表达式:

var list = this.GetPackages().ToList();
      list = list.OrderByDescending(package => package.PackageVersion)
        .GroupBy(g => g.PackageId)
        .Select(packages => packages.First()).ToList();
      return list;

但是我似乎想不出等效的MongoDB表达式,甚至无法让$project函数工作:

db.packages.aggregate([
    {
        $sort : { packageVersion : -1 }
    },
    {
        $group: { _id: "$PackageId" }
    },
    {
        $project: { PackageVersion: 1, Title: 1 }
    }
])

我的结果是这样的:

{ "_id" : "e3afb1fe-dce7-476e-8372-cd8201abc131" }
{ "_id" : "e3722179-0903-4894-9a86-3a3ffd94de83" }
{ "_id" : "3e65e93a-4c2c-4a02-8b21-e5858a4058dd" }

MongoDB查询的格式是否正确,是否有使用C# MongoDB驱动程序的等效方法?

Understanding MongoDB Aggregate and GroupBy

使用 $first 运算符和 $$ROOT 变量来获取组中的第一个文档。

$$ROOT是一个系统变量,它:

当前引用根文档,即顶级文档 正在聚合管道阶段进行处理。

然后投影第一个文档。

db.packages.aggregate([
    {
        $sort : { packageVersion : -1 }
    },
    {
        $group: { "_id": "$PackageId","firstPackage":{$first:"$$ROOT"}}
    },
    {
        $project: { "firstPackage": 1, "_id": 0}
    }
])