我一直被困在這個問題上幾天了。我正在嘗試執行以下操作:如何獲取文檔集合中的所有嵌入項目?
請考慮以下與MongoDB中的文檔相對應的C#類。商家存儲在商家收藏中,並且都包含貨幣數組。
class Merchant
{
public string id {get;set;}
public List<Currency> MerchantCurrencies {get; set; }
}
class Currency
{
public string id {get; set; }
public string name {get; set; }
...
}
現在,我想要做的就是返回所有商家的所有貨幣在一個單一的查詢與LINQ。因爲它們是基於它的SelectMany使用連接
var currencies = merchantCollection.AsQueryable()
.SelectMany(m => m.MerchantCurrencies)
.Where(ccy => ccy.CurrencyState == currencyStatus)
.OrderBy(ccy => ccy.CurrencyName);
和
var currencies= from merch in merchantCollection.AsQueryable()
from ccy in merch.MerchantCurrencies
select ccy
然而,所有這些事情不工作:我已經試過類似的事情和的SelectMany多FROM子句,像這樣。 SelectMany的使用將拋出一個異常,因爲MongoDB C#驅動程序不支持它。
除了使用聚合框架/圖減少/多個查詢之外,是否有解決我的問題的方法?
我發現的唯一的解決辦法,就是:
1.讓所有商家
2.循環在商家
3.遍歷本國貨幣
4.添加貨幣到另一個列表變量
然而,我不喜歡這種方法,因爲如果它是一個巨大的集合,我必須得到所有的商業對象,這是一個非常昂貴的操作。
親切的問候
你好,感謝你的回答,但不幸的是,它不會工作。 SelectMany的內部實現使用連接來組合多個表。 MongoDB中不存在連接。 SelectMany的使用將在使用時引發異常。我已經試過那個。 – SVH 2015-04-02 12:05:20
對不起,我錯過了關於你的問題的部分,涉及MongoDB中的連接。我相應地編輯了我的答案。 – prudentcoder 2015-04-02 14:16:27