MongoDB C#Aggregation – unwind – > groupBy
我有OrderItems的对象Order。 我需要按字段ProductId(在orderItems中)对数据进行分组,并显示每个产品的总和。 此解决方案效果很好:
var collection = database.GetCollection("Order"); var result = collection.Aggregate().Unwind(x=>x.OrderItems) .Group(new BsonDocument { {"_id", "$OrderItems.ProductId"}, {"suma", new BsonDocument { { "$sum" , "$OrderItems.UnitPriceExclTax"} } } }).ToListAsync().Result;
但我不想使用管道,我需要在c#中准备完整的样本。 而这个解决方案不起作用。
var collection = database.GetCollection("Order"); var result = collection.Aggregate() .Unwind(x=>x.OrderItems) .Group(i => i.ProductId, g => new { ProductId = g.Key, Count = g.Sum(i.UnitPriceExclTax) })
谢谢你的帮助,
我找到了解决方案,我准备了额外的课程:
[BsonIgnoreExtraElements] public class UnwindedOrderItem { public OrderItem OrderItems { get; set; } } var agg = database.GetCollection("Order") .Aggregate() .Unwind(x => x.OrderItems) .Group(x=>x.OrderItems.ProductId, g => new { Id = g.Key, Suma = g.Sum(x=>x.OrderItems.PriceExclTax) }) .ToListAsync().Result;
在我看来,你正在尝试使用linq
语法而不是mongodb
。 我不知道任何解决方案可以允许类似于上面在aggregation-pipeline
描述的语法。