2017-07-13 15 views
0

を使用して、事前検索クエリ私はそこに最大5つのパラメータとすることができるが02.from_date マングース:MongoDBの

01.name_or_numberそれが5以下

からのparamsの任意の番号を持つ可能性のある検索クエリを作成したいです

03.to_date

04.is_validated

05.is_premium

私は以下のような質問をすることができます。

var query = {$or:[ 
    {'name':nameOrNumber}, 
    {'number': nameOrNumber} 
    ]}; 

値を持つフィールドのみを持つようなクエリを作成したいと思います。

ユーザーがfrom_dateとto_dateを選択し、他の3つのフィールドが空白の場合は、2つの日付パラメータのみを使用して検索する必要があります。

if/elseで複数のクエリを作成できますが、これを行うことができる単一のクエリを作成したいと考えています。

ケース1: - name_or_number

ケース2を使って検索することができ ユーザ: - ユーザーFROM_DATEおよび/またはTO_DATEを使用して検索することができます

ケース3: - name_or_numberと日付

の両方を使用して検索することができます ユーザー

4ケース: - :- ユーザーがis_validatedおよび/またはis_premium

ケース5を使用して検索することができますユーザーは、すべての5つのparams

より多くのケースで検索することができます...

が可能ということですか?はいの場合、どうですか?

ありがとうございます。

+0

したがって、 '$ or'は基本的に引数の「リスト」または「配列」をとります。これは、MongoDB Query DSL全体のように、実際には単純なJavaScriptオブジェクトまたは配列です。オブジェクトを操作するだけです。必要に応じて新しい項目を配列にプッシュします。 –

+0

@Neil ...私は数日前にそれを学び始めました。コードやリファレンスで私を表示することは可能ですか? – Hitendra

+0

何を学ぶ? JavaScript?それは私があなたに実現を指摘しようとしている基本的なリスト操作です。特別なものは何もなく、単純なデータ構造です。 –

答えて

0

はい、可能です。あなたのmongooseクエリ(この例では 'queryObj'と呼ばれます)のために動的に生成されたクエリオブジェクトを作成する必要があります。サーバーサイドスクリプトは、ユーザーが検索するように選択したクライアント側からサーバーに送信されたデータを反復処理し、MongoDBコレクションを検索するためのプロパティ名(例: 'name')を含むプロセスキーと値のペアで作成する必要があります。潜在的な一致/マッチ(例えば、 'David')。注意すべき点は、各プロパティ名の可能性のある一致を配列に格納することをお勧めします。最後に、単純にmongoose findクエリーでqueryObjを配置し、次のように使用します。

var queryObj = {}; 

// iterate through the data you sent to the server 
    for (var i = 0; i < data.length; i++) { 
     if (data[i].values.length > 0) { 
     queryObj[data[i].keys] = { $in: data[i].values }; 
     } 
    } 

// now place that new object into your mongoose query 
    Account.find(queryObj, function (err, results) { 
     if (err) { 
      throw err; 
     } else { 
     // do whatever you want with your results 
      results; 
     } 
    }); 
+1

私はNeilによって提案されたようにしました。あなたの努力に感謝します。 – Hitendra

関連する問題