我试图在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驱动程序执行此操作的等效方法?
答案 0 :(得分:2)
使用$first
运算符和$$ROOT变量来获取组中的第一个文档。
$$ROOT
是一个系统变量:
当前引用根文档,即顶级文档 在聚合管道阶段进行处理。
然后投射第一个文件。
db.packages.aggregate([
{
$sort : { packageVersion : -1 }
},
{
$group: { "_id": "$PackageId","firstPackage":{$first:"$$ROOT"}}
},
{
$project: { "firstPackage": 1, "_id": 0}
}
])