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

MongoDB C# Aggregation med LINQ

Du kan bruge LINQ-syntaks, som bliver oversat til Aggregation Frameworks syntaks. Forudsat at du har følgende Model klasse:

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

du kan bruge where for at angive tidsstemplets område og derefter bruge group med null som grupperingsnøgle. MongoDB driver vil oversætte Min , Max og Average fra anonym type til $max , $min og $avg fra Aggregation Framework-syntaks

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

Liste over akkumulatorer understøttet af MongoDB-driveren kan findes her .

EDIT:(Model)null er påkrævet, fordi forespørgslen skal transformeres til $group med _id indstillet til null (dokumenter ), da du ønsker at få ét resultat med aggregater. Casting er påkrævet kun til C# compiler formål, da doc er af typen Model .



  1. Sådan returneres det sidste push() indlejrede dokument

  2. gruppe i mongo ekskl. nulværdier

  3. Hvordan forbinder man Django Rest-api med MongoDB?

  4. MongoDB - Collection mangler et unikt indeks på _id