MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégation MongoDB C# avec LINQ

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 .