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
.