2012-05-23 11 views
14

ここに問題があります。従来のリレーショナルデータベースのLIKEのようなものを使って、私のNode JSファイルでMongoDBを照会したいと思います。問題は、私が好きにしたいことがリテラルではないということです。それは変数です!私はまだこれを行う良い方法を見つけました。ここで私はそれを取った「durrr最初にしてみてください」のショットだった:ノードJSでRegexを使用してMongoクエリーを実行する場合

var result = postData.replace(/\+/g,' ').substring(5); 
db.testlogwiki.find({"line_text" : /result/ }; 
//predictably only matches to the literal "result" as opposed to my variable 

testlogwikiはモンゴで作られては...私はそれを実行している、これは文字通り「line_text」を含む「結果」​​を持つエントリをDBへマッハを行います。

それは非常に単純な質問のように思える...

答えて

33

は、この方法を試してください。

db.testlogwiki.find({"line_text" : new RegExp(result) }; 
+0

あなたは聖人です。家に帰るとこれを受け入れます(私は受け入れられない時間があります)。 – PinkElephantsOnParade

+0

今upvoteすることができるはずです:) –

+2

あなたの変数に正規表現の特殊文字がないとうまくいけば、これは失敗します! –

2

また、$の正規表現オプションを使用することができます。

db.testlogwiki.find({ line_text: { $regex: result[, $options: 'i'] } }); 
4

の両方が変数あなたの入力に応じて、失敗することがあり

db.testlogwiki.find({"line_text" : new RegExp(result, 'i') }; // to make this case insensitive 

または

db.testlogwiki.find({ line_text: { $regex: result[, $options: 'i'] } }); 
0

他の回答のすべてを動作します

他の人が持っているようにあなたが正規表現を使用することができますあなたが特別な正規表現をエスケープする必要がありますcこれは失敗する可能性があります。

Lodashが

https://lodash.com/docs#escapeRegExp

db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') }; (あなたがする必要がありますおそらくそれを使用していない場合は、それもES6 +仕様ではなく、砂糖の多くを追加します)これを行うための機能を持っています

関連する問題