MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggregazione C# MongoDB con LINQ

È possibile utilizzare la sintassi LINQ che viene tradotta nella sintassi di Aggregation Framework. Supponendo che tu abbia seguito Model classe:

public class Model
{
    public DateTime Timestamp { get; set; }
    public float Value { get; set; }
}

puoi usare where per specificare l'intervallo di timestamp e quindi utilizzare group con null come chiave di raggruppamento. Il driver MongoDB tradurrà Min , Max e Average dal tipo anonimo a $max , $min e $avg dalla sintassi del Framework di aggregazione

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();

È possibile trovare l'elenco degli accumulatori supportati dal driver MongoDB qui .

EDIT:il (Model)null è richiesto perché la query deve essere trasformata in $group con _id impostato su null (documenti ) poiché si desidera ottenere un risultato con gli aggregati. Il cast è richiesto solo per lo scopo del compilatore C# poiché il documento è di tipo Model .