Możesz użyć składni LINQ, która zostanie przetłumaczona na składnię Aggregation Framework. Zakładając, że masz następujący Model
klasa:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
możesz użyć where
aby określić zakres sygnatury czasowej, a następnie użyj group
z null
jako klucz grupujący. Sterownik MongoDB przetłumaczy Min
, Max
i Average
z typu anonimowego do $max
, $min
i $avg
ze składni agregacji 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();
Listę akumulatorów obsługiwanych przez sterownik MongoDB można znaleźć tutaj .
EDYCJA:(Model)null
jest wymagane, ponieważ zapytanie musi zostać przekształcone w $group
z _id
ustaw na null
(dokumenty
), ponieważ chcesz uzyskać jeden wynik z agregatami. Rzutowanie jest wymagane tylko dla celów kompilatora C#, ponieważ dokument jest typu Model
.