gpt4 book ai didi

c# - MongoDB C# 2.0 驱动程序多次展开

转载 作者:IT老高 更新时间:2023-10-28 13:22:06 25 4
gpt4 key购买 nike

我是第一次尝试 Mongo,但遇到了一个问题:

public class A
{
public int ID {get;set;}
.
.
.
public List<B> Bs { get; set; }
}

public class B
{
public int ID { get; set; }
.
.
.
public List<C> Cs { get; set; }
}

public class C
{
public string Name { get; set; }
public double Amount { get; set; }
}

当我按名称对 C 进行分组时,我想取回总和金额最高的前 10 个 C。例如,John Smith 可以在单个 A 中的多个 B 中,也可以在多个不同 A 中的 B 中

我可以在 Mongo Shell 中通过运行:

db.As.aggregate(  
{$unwind: "$Bs"},
{$unwind: "$Bs.Cs"},
{$group: { _id: "$Bs.Cs.Name", total: {$sum: "$Bs.Cs.Amount"}}},
{$sort: {total: -1}},
{$limit: 10}
);

但我不知道如何在我的 C# 应用程序中使用 MongoDB 2.0 驱动程序执行此操作。有人能指出我正确的方向吗?

另外,我是一名 SQL Server 人员,并且非常习惯使用存储过程,我是否应该将此特定聚合放在服务器上存储的 javascript 中,然后从我的 C# 应用程序中调用它?如果是这样,您如何使用 2.0 驱动程序调用存储的 javascript?

谢谢!

最佳答案

遗憾的是,并非所有 MongoDB 查询都可以使用 LINQ 编写。无论如何你可以通过聚合来实现它:

var collection = database.GetCollection<A>("As");
var result = await collection
.Aggregate()
.Unwind(x => x.Bs)
.Unwind(x => x["Bs.Cs"])
.Group(new BsonDocument {{"_id", "$Bs.Cs.Name"}, {"total", new BsonDocument("$sum", "$Bs.Cs.Amount")}})
.Sort(new BsonDocument("total", -1))
.Limit(10)
.ToListAsync();

关于c# - MongoDB C# 2.0 驱动程序多次展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30685849/

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