sql >> Base de Datos >  >> NoSQL >> MongoDB

Agregación de MongoDB C# con LINQ

Puede usar la sintaxis de LINQ que se traduce a la sintaxis de Aggregation Framework. Suponiendo que tiene el siguiente Model clase:

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

puedes usar where para especificar el rango de marca de tiempo y luego usar group con null como clave de agrupación. El controlador MongoDB traducirá Min , Max y Average de tipo anónimo a $max , $min y $avg de la sintaxis del marco de agregación

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 lista de acumuladores compatibles con el controlador MongoDB se puede encontrar aquí .

EDITAR:el (Model)null es obligatorio porque la consulta debe transformarse en $group con _id establecido en null (docs ) ya que desea obtener un resultado con agregados. La conversión es necesaria solo para fines de compilación de C#, ya que el documento es de tipo Model .