gpt4 book ai didi

c# - 使用 mongodb C# 驱动程序进行分组和投影

转载 作者:可可西里 更新时间:2023-11-01 09:51:23 27 4
gpt4 key购买 nike

我有以下实体集合:

public class Branch
{
[BsonId]
public ObjectId Id { get; set; }
public string Description { get; set; }
public ObjectId PartnerId { get; set; }
public IEnumerable<Discount> Discounts { get; set; }
}

我想按 PartnerId 分组并选择 PartnerId,首先不是 null Description 并连接 (SelectMany) 组中的所有 Discounts 数组。基本上所需的结果是一个数组:

public class GroupProjection
{
public ObjectId PartnerId { get; set; }
public string Description { get; set; }
public IEnumerable<Discount> Discounts { get; set; }
}

是用 AggregateAsync API 完成的吗?

我刚刚开始使用 mongodb 和 mongo c# 驱动程序。可以使用 Linq 还是必须求助于 JScript 组定义来构建管道?

我已经浏览了 tests对于 c# 驱动程序,但它不是很明显,因为它们使用内部帮助程序来构建具有分组标准的 Bson 文档。

最佳答案

MongoDB Fluent API 目前不支持SelectMany 扩展方法。但是,您可以解决此问题。

var groupResult =
await collection
.Aggregate()
.Group(
x => x.PartnerId,
g => new
{
PartnerId = g.Key,
Description = g.First(x => x.Description != null).Description,
Discounts = g.Select(x => x.Discounts)
})
.ToListAsync();

var result =
groupResult
.Select(x =>
new GroupProjection
{
PartnerId = x.PartnerId,
Description = x.Description,
Discounts = x.Discounts.SelectMany(d => d)
})
.ToList();

关于c# - 使用 mongodb C# 驱动程序进行分组和投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com