sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB C# Aggregation med LINQ

Du kan använda LINQ-syntax som översätts till Aggregation Frameworks syntax. Förutsatt att du har följande Model klass:

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

du kan använda where för att ange tidsstämpelintervall och använd sedan group med null som grupperingsnyckel. MongoDB-drivrutinen kommer att översätta Min , Max och Average från anonym typ till $max , $min och $avg från 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();

Lista över ackumulatorer som stöds av MongoDB-drivrutinen finns här .

EDIT:(Model)null krävs eftersom frågan måste omvandlas till $group med _id inställd på null (dokument ) eftersom du vill få ett resultat med aggregat. Casting krävs bara för C#-kompilatorändamål eftersom doc är av typen Model .



  1. MongoDB - Varför kastar inte _id-indexet ett fel på dubbla poster?

  2. Lagring av DateTime i MongoDB påverkar prestanda

  3. Hur man $lookup genom att undvika nollvärden i mongodb-aggregat

  4. MongoDb med FastAPI