È possibile utilizzare la sintassi LINQ che viene tradotta nella sintassi di Aggregation Framework. Supponendo che tu abbia seguito Model
classe:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
puoi usare where
per specificare l'intervallo di timestamp e quindi utilizzare group
con null
come chiave di raggruppamento. Il driver MongoDB tradurrà Min
, Max
e Average
dal tipo anonimo a $max
, $min
e $avg
dalla sintassi del Framework di aggregazione
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();
È possibile trovare l'elenco degli accumulatori supportati dal driver MongoDB qui .
EDIT:il (Model)null
è richiesto perché la query deve essere trasformata in $group
con _id
impostato su null
(documenti
) poiché si desidera ottenere un risultato con gli aggregati. Il cast è richiesto solo per lo scopo del compilatore C# poiché il documento è di tipo Model
.