簡體   English   中英

MongoDB C#2.0驅動程序多次展開

[英]MongoDB C# 2.0 Driver Multiple Unwinds

我是第一次嘗試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. 因此,例如,約翰史密斯可以在單個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}
);

但我無法弄清楚如何使用MongoDB 2.0驅動程序在我的C#應用​​程序中執行此操作。 有人能指出我正確的方向嗎?

此外,我是一個SQL Server的人,我非常習慣使用sprocs,我應該把這個特定的聚合放在服務器上存儲的javascript中,只是從我的C#app調用它? 如果是這樣,你如何使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM