Du kan använda LINQ-syntax som översätts till Aggregation Frameworks syntax. Förutsatt att du har följande Model
klass:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
du kan använda where
för att ange tidsstämpelintervall och använd sedan group
med null
som grupperingsnyckel. MongoDB-drivrutinen kommer att översätta Min
, Max
och Average
från anonym typ till $max
, $min
och $avg
från Aggregation Framework-syntax
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();
Lista över ackumulatorer som stöds av MongoDB-drivrutinen finns här .
EDIT:(Model)null
krävs eftersom frågan måste omvandlas till $group
med _id
inställd på null
(dokument
) eftersom du vill få ett resultat med aggregat. Casting krävs bara för C#-kompilatorändamål eftersom doc är av typen Model
.