MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregação MongoDB C# com LINQ


Você pode usar a sintaxe LINQ que é traduzida na sintaxe do Aggregation Framework. Supondo que você tenha o seguinte Model classe:
public class Model
{
    public DateTime Timestamp { get; set; }
    public float Value { get; set; }
}

você pode usar where para especificar o intervalo de carimbo de data/hora e, em seguida, use group com null como chave de agrupamento. O driver MongoDB traduzirá Min , Max e Average do tipo anônimo para $max , $min e $avg da sintaxe do Aggregation Framework
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();

A lista de acumuladores suportados pelo driver MongoDB pode ser encontrada aqui .

EDIT:o (Model)null é necessário porque a consulta deve ser transformada em $group com _id definido como null (documentos ) já que você deseja obter um resultado com agregados. A conversão é necessária apenas para fins de compilador C#, pois doc é do tipo Model .