2012-08-23 78 views
8

我開發了一個簡單的API,它允許您在MongoDB集合中建立一個搜索條件數組。我現在需要能夠將此數組轉換爲實際的Mongo Query,而這部分是我極其困難的地方。如何使用MongoDB和C#驅動程序構建複雜的查詢?

理想的情況下,我經過一些語法,讓我做下面的僞代碼:

var query = new QueryBuilder(); 
foreach (var group in groups) 
{ 
    switch (group.Condition) 
    { 
     case GroupCondition.Or: 
      query.Or(group.Queries); 
     break; 
     case GroupCondition.And: 
      query.And(group.Queries); 
     break; 
    } 
} 
return myCollection.FindAs(type, query); 

其實我是想建立稍微更復雜的查詢,但最終我找的功能動態建立我的查詢與上面我的僞代碼中看到的對象。

如果我沒有對自己想要達到的目標有足夠的瞭解,請隨時向我諮詢更多詳細信息。

+0

所以在你太過分之前,你應該考慮使用Linq。 – kelloti

+0

同樣在這裏。我看到一些人使用查詢的例子與多個查詢表達式鏈接在一起,但是,當我這樣做Query.EQ()。GT();它不工作,因爲EQ/GT不返回查詢對象。我在這裏錯過了什麼? –

回答

4

似乎你有正確的想法......有一個叫做查詢的類,實質上是一個沒有實例化的查詢生成器。

使用MongoDB.Driver.Builders;

Query.And,Query.Or等...都在那裏。這與linq提供者下面用於構建複雜查詢的東西是一樣的。

+0

有人真的可以指出一個顯示多個查詢選擇器串在一起的例子嗎?看起來像查詢不可鏈接。 –

+1

@RickStrahl像AST一樣構建它。 Query.EQ(「y」,2)), Query.GT(「z」,3)); –

+0

@RickStrahl我最終創建了一個定製的查詢語言,然後編譯成Mongo Queries(因此提出這個問題)。查詢語言最終被淘汰,但它確實有效(通過一系列測試!)。你還需要幫助嗎?我一直試圖重新創建它並公開爲OSS - 甚至可能會爲一些幫助者發佈一個NuGet包。 – JustinN

相關問題