c# - MongoDB .NET 流畅聚合查询

标签 c# mongodb aggregation-framework mongodb-.net-driver

我正在尝试使用 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

关于c# - MongoDB .NET 流畅聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527381/

相关文章:

node.js - 使用 mongoose 在 mongodb 中存储图像?如何?

php - mongodb 聚合 php

c# - 启用 asp.net core 请求验证

c# - 如何在 WCF 中实现可靠的 UDP 传输?

node.js - 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值

java - MongoDB - Spring Data 获取仅包含请求字段的文档(不多也不少)

MongoDB聚合$match阶段与条件查询

javascript - 如何正确设置多个字段 $min

c# - 使用 .NET 4.0 还是 .NET 3.5?

c# - 如何在 Visual Studio for OSX 上搭建项目基架