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
.