2017-05-23 5 views
0

をマングース、私は私のコレクションの中に次のフィールドがあります。値がそれ以外の無視存在する場合は、フィルタを適用する -

"intent" : [ 
    "Find a job", 
    "Advertise a job" 
], 

私は基本的にその場で結果をフィルタリングされてやろうとしています。私が指定したときに今、この作品

var _intent = req.body.intent; 

Reason.find({ intent: { $in: _intent }}, function (err, reason) {     
    if (err) { 
    res.send(err); 
    } 

    res.json(reason); 

}); 

:エンドユーザーが

[ 
    "Find a job", 
] 

に合格した場合

は、だから私は、これはこれまでのところ、私のクエリで意図Find a jobを持っているすべての文書を返します私は$in使用しているようintentの値 - Logical Query Operatorは、しかし、私はそれがすべての文書を返すことに失敗したintentの値を指定するので、私は何を求めていることは、ありませんとき01場合、私が言うことができる方法があります値は、それは、フィルタを適用していないいないそうでない場合は、それをフィルタリングしていますか?

+0

これを確認してみてください https://stackoverflow.com/questions/27510143/empty-array-prevents-document-to-appear-in-query –

+0

私が探しているものと思われる、 MongoDBのとマングースので、ここで私の愚かさを言い訳が、彼は、彼はあなたが$ unwind'前に、この右のような追加の$プロジェクトの段階を挿入したいので、私はで述べた私のクエリにその状態を結ぶだろうか '言うとき何を意味していることがメートル新しいです私の質問? –

答えて

1

なぜ動的にクエリオブジェクトを設定していませんか?

var query = {}; 

if (req.body.hasOwnProperty('intent')) 
    query.intent = { "$in": req.body.intent }; 

Reason.find(query, function(err, reason) { 

}); 

あるいは

if (req.body.intent.length > 0) 

これまでどのロジックスーツケース。これはすべてJavaScriptだけです。

+0

が動作しているようだ、と私は個人的にこのアプローチを好む、目に読み取るためにクリーンかつ容易になります。 –

+1

@CodeRatchetは実際にあなたが与えられたリンクは、別の何かについて実際にあります。それを汗ばませないでください、これは私たち全員がやる方法です。クエリは、オブジェクトを操作できるように設計されています。 –

+0

説明をありがとう:) –

関連する問題