Você pode usar a sintaxe LINQ que é traduzida na sintaxe do Aggregation Framework. Supondo que você tenha o seguinte
Model classe:public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
você pode usar
where para especificar o intervalo de carimbo de data/hora e, em seguida, use group com null como chave de agrupamento. O driver MongoDB traduzirá Min , Max e Average do tipo anônimo para $max , $min e $avg da sintaxe do 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();
A lista de acumuladores suportados pelo driver MongoDB pode ser encontrada aqui .
EDIT:o
(Model)null é necessário porque a consulta deve ser transformada em $group com _id definido como null (documentos
) já que você deseja obter um resultado com agregados. A conversão é necessária apenas para fins de compilador C#, pois doc é do tipo Model .