Tho*_*mas 7 c# aggregation mongodb
我有一个带有这些字段的 mongo 对象:
DateTime TimeStamp;
float Value;
Run Code Online (Sandbox Code Playgroud)
如何在 C# 中使用 LINQ 获取聚合管道,以获取特定时间戳范围内 Value 的最小值、最大值和平均值?
我看过一些聚合示例,但我不太明白。有一个像这样的简单案例的例子肯定会(希望)让我理解它。
您可以使用 LINQ 语法,该语法被转换为聚合框架的语法。假设您有以下Model课程:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以使用where指定时间戳范围,然后使用groupwithnull作为分组键。MongoDB的驱动器将翻译Min,Max并Average从匿名类型进入$max,$min并$avg从聚合框架语法
var q = from doc in Col.AsQueryable()
where doc.Timestamp > DateTime.Now.AddDays(-3)
where doc.Timestamp < DateTime.Now.AddDays(3)
group doc by (Model)null into gr
select new
{
Avg = (double)gr.Average(x => x.Value),
Min = gr.Min(x => x.Value),
Max = gr.Max(x => x.Value)
};
var result = q.First();
Run Code Online (Sandbox Code Playgroud)
可以在此处找到 MongoDB 驱动程序支持的累加器列表。
编辑:(Model)null是必需的,因为查询必须转换为$groupwith _idset to null( docs ),因为您想通过聚合获得一个结果。仅出于 C# 编译器的目的需要强制转换,因为 doc 是Model.
| 归档时间: |
|
| 查看次数: |
7380 次 |
| 最近记录: |