MongoDB .NET Fluent 聚合查询

MongoDB .NET Fluent Aggregate Query

我正在尝试使用 MongoDB 的流畅语法编写下面的查询。我正在使用最新的 .NET 驱动程序。我不喜欢用于命名列的字符串,并且宁愿不必也执行 Bson 序列化。

var collection = _mongoDbClient.GetDocumentCollection<JobResult>();
var bsonDocuments = collection.Aggregate()
    .Group<BsonDocument>(new BsonDocument{ { "_id", "$RunDateTime" }, { "Count", new BsonDocument("$sum", 1) } })
    .Sort(new BsonDocument { { "count", -1 } })
    .Limit(20)
    .ToList();

foreach (var bsonDocument in bsonDocuments)
{
    jobResultRunDateTimes.Add(BsonSerializer.Deserialize<JobResultRunDateTime>(bsonDocument));
}

C# 驱动程序实现了针对 mongo 聚合框架的 LINQ,因此您应该能够使用标准的 linq 运算符进行查询。

下面的示例显示了一个分组依据(在假定的 属性 Id 上)并计算文档数量,然后进行排序。在下面的示例中,x 的类型为 JobResult,即您在获取集合时使用的类型。

var result = collection.AsQueryable().GroupBy(x => x.Id).
Select(g=>new { g.Key, count=g.Count()}).OrderBy(a=>a.Key).Take(1).ToList();

有关详细参考和更多示例,请参阅 C# driver documentation