BsonClassMap.RegisterClassMap(new ItemClassMap());
|
BsonClassMap.RegisterClassMap(new SubItemClassMap());
|
BsonClassMap.RegisterClassMap(new AggregationClassMap());var pipeline = PipelineDefinitionBuilder.For<Item>()
|
.Group(
|
e => e.Date,
|
grouping => new Aggregation
|
{
|
Date = grouping.Key, Count = grouping.Sum(item => item.Items.Length)
|
});var renderedPipeline = pipeline.Render(BsonSerializer.LookupSerializer<Item>(), BsonSerializer.SerializerRegistry, LinqProvider.V3).Documents;foreach (var doc in renderedPipeline) Console.WriteLine(doc.ToString());
|
|
public class SubItem
|
{
|
public string Name { get; set; }
|
}
|
|
public class Item
|
{
|
public string Id { get; set; }
|
public DateTime Date { get; set; }
|
public SubItem[] Items { get; set; }
|
}
|
|
public class Aggregation
|
{
|
public DateTime Date { get; set; }
|
public long Count { get; set; }
|
}
|
|
public class SubItemClassMap : BsonClassMap<SubItem>
|
{
|
public SubItemClassMap()
|
{
|
MapMember(e => e.Name).SetElementName("name");
|
}
|
}
|
|
public class ItemClassMap : BsonClassMap<Item>
|
{
|
public ItemClassMap()
|
{
|
MapIdField(e => e.Id).SetIdGenerator(StringObjectIdGenerator.Instance);
|
MapMember(e => e.Date).SetElementName("date");
|
MapMember(e => e.Items).SetElementName("items");
|
}
|
}
|
|
public class AggregationClassMap : BsonClassMap<Aggregation>
|
{
|
public AggregationClassMap()
|
{
|
MapMember(e => e.Date).SetElementName("date");
|
MapMember(e => e.Count).SetElementName("count");
|
}
|
}
|