MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB C#-Aggregation mit LINQ

Sie können die LINQ-Syntax verwenden, die in die Syntax von Aggregation Framework übersetzt wird. Angenommen, Sie haben folgendes Model Klasse:

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

Sie können where verwenden um den Zeitstempelbereich anzugeben und dann group zu verwenden mit null als Gruppierungsschlüssel. Der MongoDB-Treiber übersetzt Min , Max und Average vom anonymen Typ in $max , $min und $avg aus der 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();

Eine Liste der vom MongoDB-Treiber unterstützten Akkumulatoren finden Sie unter hier .

BEARBEITEN:der (Model)null ist erforderlich, da die Abfrage in $group umgewandelt werden muss mit _id auf null gesetzt (docs ), da Sie mit Aggregaten ein Ergebnis erhalten möchten. Das Casting ist nur für den C#-Compiler erforderlich, da das Dokument vom Typ Model ist .