U kunt LINQ-syntaxis gebruiken die wordt vertaald in de syntaxis van Aggregation Framework. Ervan uitgaande dat u het volgende Model
hebt klas:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
je kunt where
. gebruiken om het tijdstempelbereik op te geven en gebruik vervolgens group
met null
als groeperingssleutel. MongoDB-stuurprogramma vertaalt Min
, Max
en Average
van anoniem type naar $max
, $min
en $avg
van de syntaxis van het aggregatieraamwerk
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();
Lijst met accumulatoren die worden ondersteund door MongoDB-stuurprogramma is te vinden hier .
EDIT:de (Model)null
is vereist omdat de zoekopdracht moet worden omgezet in $group
met _id
ingesteld op null
(docs
) omdat u één resultaat wilt krijgen met aggregaten. Casting is alleen vereist voor C#-compilerdoeleinden, aangezien doc van het type Model
is .