我有带orderitems的object order。
我需要按字段productid(在orderitems中)对数据进行分组,并显示每个产品的总和。
这个解决方案很有效:

var collection = database.GetCollection<Order>("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>("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>("Order")
                .Aggregate()
                .Unwind<Order, UnwindedOrderItem>(x => x.OrderItems)
                .Group(x=>x.OrderItems.ProductId, g => new
                {
                    Id = g.Key,
                    Suma = g.Sum(x=>x.OrderItems.PriceExclTax)
                })
                .ToListAsync().Result;

10-07 14:23