2016-05-04 2 views
0

特定のフィールドデータの結果を返すためにmongooseクエリを作成できますか?mongo/mongooseフィールドを削除するフィールドを検索する

例: シリーズ 'KA 04 A'と 'KA04A​​'は同じです。新しいシリーズが既にmongooseからmongobに存在する場合、新しいシリーズを追加しながらチェックしたい。

seriesModel.find({series_name:req.body.seriesName.toUpperCase(), status:'active'}, function(err, data){ 
     if(err){ 

      logger.info(err); 
      return false; 
     } 
     else if(data.length){ 

      return res.json({error:true,message:'Series name already exists.'}); 
     } 

がどのように私は、スペースなしでDBからフィールドデータを返すことができます

現在、私のシリーズのフィールドがある私のマングースの現在のコード の間にスペースがあります。私は同じシリーズが存在するかどうかを確認することができます。

答えて

0

series_nameフィールドをに標準化すると、は空白を取り除くカスタムフックを使ってレコードを保存するのが理想的です。

つまり、クエリでは正規表現を使用できます。あなたの問題を解決するため

model.findOne({name: /mongoose/i}, fn(){...}); 

一つの方法は、あなたの文字列を取る個々の文字に分割し、その後、注入することになります。たとえば、次のように言葉「マングース」の大文字/小文字のバリエーションを検索することができますすべての文字間の空白のパターン\s(私は、このフィールドには先頭または末尾の空白が存在しないと仮定しています): "(

"^" + "KA04A".split("").join("\\s*") + "$" // "^K\s*A\s*0\s*4\s*A$" 

開始^を、我々は例えば上の偽陽性を取得しないように$が必要である終了xKA04A​​x ")

次は、正規表現形式(/^K\s*A\s*0\s*4\s*A$/)にこの文字列を変換し、あなたのクエリにそれをプラグインする必要があります:

model.findOne({name: new RegExp("^K\\s*A\\s*0\\s*4\\s*A$")}, fn(){...}); 

主要警告:あなたはあなたの元の文字列のみa-zA-Z0-9が含まれていることを超注意する必要があります。空白。最初にそれらの文字をエスケープすることなく、正規表現パターンと誤解される可能性のあるものを含めることはできません(この方法についてはhereを参照してください)。

関連する問題