2016-05-03 3 views
0

だから私はデータベース内のアイテムをmongoose .find()関数を使って検索したい。 私のルーターでは、URLから特定の項目を取得するためのこのコードがあります。 たとえば、キー値のないデータを見つける

mydomainname.com/market?type=1&name=hi&stats=123 ...?type=123&name=&...

var type = req.query.type; 
var name= req.query.name; 
var stats= req.query.stats; 
Model.find({type: type, name: name, stats: stats}) 
       .exec(function(err, model){ 
        if(err){ 
         console.log("error") 
        }else{ 
         res.render('*jade*', {models: JSON.stringify(model)}) 
        }}) 

これは正常に動作しますが、URLには、クエリの値が(上で見たように)が存在しない場合、クエリの値が''に設定されます。私はデータベースにあるすべてのアイテムを並べ替えます。name = ''の例はありません。

私は周りを検索していますが、私は何か助けを見つけることができませんでしたので、もし私がヒントを与えることができるなら、私は感謝します!

+0

値であれば、あなたが求める場合空かヌル?この回答はそれを説明します:http://stackoverflow.com/a/16532000/3558900 –

+0

私は5つの異なるquerysがあり、それらのすべてが価値がないと言うことができます。 if文とelse文をあまり使わないところで、{$ ne:null}を使う方法が見えません。そして、2^5は、ifとelseのステートメントをたくさん作り出す32の異なる組み合わせです。何とか{$ ne:null}を文字列オブジェクトに転送できますか? – DavidS

+0

http://stackoverflow.com/questions/31995166/mongoose-optional-search-query-parametersの可能な部分 – JohnnyHK

答えて

0

リクエストクエリパラメータの値に基づいて、find()クエリオブジェクトを作成できます。 nameフィールドに、次の例をチェックし、それが空の文字列値を持つ場合、クエリからプロパティを削除してからfind()フィルタとして、最終的なクエリオブジェクトを使用します。

var q = req.query; 
if (q.name === '') { 
    delete q.name; 
} 

// carry out further checks 

Model.find(q) 
    .exec(function(err, model){ 
     if(err){ 
      console.log("error"); 
     }else{ 
      res.render('*jade*', {models: JSON.stringify(model)}); 
     } 
    }) 
+0

ありがとう、それは完全に働いた! – DavidS

0
Try this 



    var q = req.query; 
    var data ={}; 
    if (q.name !=null) { 
     data.name = q.name; 
    } 
    else if (q.type !=null){ 
     data.type = q.type; 
    } 
    else if (q.stats !=null){ 
     data.stats = q.stats; 
    } 
    else{ 
     data={}; 
    } 
     Model.find(data) 
      .exec(function(err, model){ 
       if(err){ 
        console.log("error"); 
       }else{ 
        res.render('*jade*', {models: JSON.stringify(model)}); 
       } 
      }) 
関連する問題