Вы можете использовать синтаксис LINQ, который переводится в синтаксис Aggregation Framework. Предполагая, что у вас есть следующий Model
класс:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
Вы можете использовать where
, чтобы указать диапазон отметок времени, а затем использовать group
с null
в качестве ключа группировки. Драйвер MongoDB преобразует Min
, Max
и Average
из анонимного типа в $max
, $min
и $avg
из синтаксиса Aggregation Framework
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();
Список аккумуляторов, поддерживаемых драйвером MongoDB, можно найти здесь .
РЕДАКТИРОВАТЬ: (Model)null
требуется, потому что запрос должен быть преобразован в $group
с _id
, установленным в null
( docs ), так как вы хотите получить один результат с агрегатами. Приведение требуется только для целей компилятора C #, поскольку документ имеет тип Model
.