2012-08-23 4 views
8

私はあなたがMongoDB Collection内で一連の検索基準を構築できるようにする簡単なAPIを開発しました。この配列を実際のMongoクエリーに変換できるようにする必要があります。この部分は私にとって非常に難しい問題です。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()のように、複数のクエリ式を連鎖させてクエリの例を使用する人もいます。 EQ/GTはクエリオブジェクトを返さないので動作しません。私はここで何が欠けていますか? –

答えて

4

あなたは正しいアイデアを持っているようです... Queryというクラスがあり、本質的にインスタンス化のないクエリビルダです。

MongoDB.Driver.Buildersを使用。

Query.And、Query.Orなどがすべてあります。これは、複雑なクエリを構築するためにlinqプロバイダの下で使用されるのと同じことです。

+0

誰かが実際に複数のクエリセレクタが一緒につながっていることを示す例を指すことができますか?クエリが連鎖できないように見えます。 –

+1

@RickStrahlはASTのように構築します。 Query.And( Query.OR( Query.EQ( "x"、1)、 Query.EQ( "y"、2))、 Query.GT( "z"、3)); –

+0

@RickStrahl私は、分解された注文言語を作成し、次にMongo Queriesにコンパイルしました(したがって、この質問をしています)。クエリ言語は最終的に廃止されましたが、それはうまくいっています(いくつかのテストで!)。あなたはまだ助けが必要ですか?私はそれをOSSとして再作成しようと誘惑されました。おそらく、いくつかのヘルパーのNuGetパッケージを公開することさえありました。 – JustinN

関連する問題