Я использую новую конвейерную конвейерную конвейерную систему в v2 драйвера 10gen Mongo C#, но испытываю исключение при попытке группировать более чем одно поле (пример кода ниже).Mongo C# Fluent Aggregation Pipeline Group Анонимный тип Key Exception
Исключение, которое выбрасывается в ...
Команда агрегатный не удалось: исключение: группа агрегатный поле «Месяц» должен быть определен как выражение внутри объекта.
Я могу заставить это работать, создав тип для моего группового ключа, но предпочел бы использовать анонимный тип, поскольку тип, который мне нужно будет создать, не будет служить никакой другой цели.
var agg = db.GetCollection<Order>("orders").Aggregate();
var project = agg.Project(o => new {o.Value
, o.Product
, Month = o.Date.Month
, Year = o.Date.Year});
var group = project.Group(
key => new { key.Month, key.Product},
g => new OrderSummary {Month = g.Key.Month
,Product = g.Key.Product
, TotalSales = g.Sum(o => o.Value)});
var result = group.ToListAsync().Result;
Для справки ...
public class Order : Entity
{
public DateTime Date { get; set; }
public string Product { get; set; }
public double Value { get; set; }
}
public class OrderSummary
{
public string Product { get; set; }
public int Month { get; set; }
public int Year { get; set; }
public double TotalSales { get; set; }
}
Команда порождена беглом API является ...
{ "aggregate" : "Order",
"pipeline" : [
{ "$project" : { "Value" : "$Value", "Product" : "$Product", "Month" : { "$month" : "$Date" }, "Year" : { "$year" : "$Date" }, "_id" : 0 } }
, { "$group" : {
"_id" : { "Month" : "$Month", "Product" : "$Product" }
, "Month" : "$Month"
, "Product" : "$Product"
, "TotalSales" : { "$sum" : "$Value" } } }]
, "cursor" : { } }