Vous pouvez utiliser la syntaxe LINQ qui est traduite dans la syntaxe de Aggregation Framework. En supposant que vous ayez le Model
suivant classe :
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
vous pouvez utiliser where
pour spécifier la plage d'horodatage, puis utiliser group
avec null
comme clé de regroupement. Le pilote MongoDB traduira Min
, Max
et Average
de type anonyme en $max
, $min
et $avg
à partir de la syntaxe du cadre d'agrégation
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();
La liste des accumulateurs pris en charge par le pilote MongoDB est disponible ici .
EDIT :le (Model)null
est obligatoire car la requête doit être transformée en $group
avec _id
défini sur null
(docs
) puisque vous souhaitez obtenir un résultat avec des agrégats. La diffusion est requise uniquement à des fins de compilateur C# car doc est de type Model
.