Můžete použít syntaxi LINQ, která se přeloží do syntaxe Aggregation Framework. Za předpokladu, že máte následující Model
třída:
public class Model
{
public DateTime Timestamp { get; set; }
public float Value { get; set; }
}
můžete použít where
zadejte rozsah časového razítka a poté použijte group
s null
jako seskupovací klíč. Ovladač MongoDB přeloží Min
, Max
a Average
z anonymního typu na $max
, $min
a $avg
ze syntaxe Agregation 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();
Seznam akumulátorů podporovaných ovladačem MongoDB naleznete zde .
EDIT:(Model)null
je vyžadován, protože dotaz musí být transformován na $group
s _id
nastavte na null
(dokumenty
), protože chcete získat jeden výsledek s agregací. Casting je vyžadován pouze pro účely kompilátoru C#, protože doc je typu Model
.