2012-05-23 19 views
14

Mam tutaj problem. Chcę zapytać mojego MongoDB w moim pliku JS węzła przy użyciu czegoś podobnego do typowego relacyjnego db. Problemem jest to, co chcę LUBIĆ nie jest dosłowne ... to jest zmienna! Nie znalazłem jeszcze dobrego sposobu, aby to zrobić. Tu był „durrr najpierw spróbować” strzał wziąłem w nim:Zapytanie Mongo z Regeksem w węźle JS operującym na zmiennej:

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 jest wykonany w Mongo ... Mam to działa i to robi mach db wpisy z „line_text” zawierający „Wynik” dosłownie.

Wydaje się to bardzo proste pytanie ...

Odpowiedz

33

Spróbuj tego:

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

Jesteś świętym. Przyjmę to, kiedy wrócę do domu (mam czas, w którym nie mogę zaakceptować). – PinkElephantsOnParade

+0

Teraz powinieneś być w stanie awansować :) –

+2

Mam nadzieję, że twoja zmienna nie zawiera żadnych specjalnych znaków regularnych w wyrażeniu regularnym lub to się nie powiedzie! –

2

Można także użyć opcji $ regex.

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

Zarówno zadziała

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

lub

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

wszystkich innych odpowiedzi może nie w zależności od wejścia zmiennej

Można użyć RegExp jak inni wskazane, ale musisz uciec ze specjalnego wyrażenia c lub może to zawieść.

Lodash posiada funkcję, aby to zrobić (jeśli nie używasz go pewnie powinno być, dodaje dużo cukru, który nie jest jeszcze w spec ES6 +)

https://lodash.com/docs#escapeRegExp

db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') };

Powiązane problemy