2012-05-23 10 views
14

Ich habe ein Problem hier. Ich möchte meine MongoDB in meiner Node JS-Datei abfragen, indem ich etwas wie LIKE für eine herkömmliche relationale Datenbank verwende. Das Problem ist die Sache, die ich gerne nicht wörtlich ist ... es ist eine Variable! Ich habe noch keinen guten Weg gefunden, dies zu tun. Hier war der „durrr zuerst versuchen“ Schuss ich es nahm:Mongo Abfrage mit Regex in Knoten JS auf einer VARIABLE

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 in Mongo gemacht ... Ich habe es läuft und tut dies macht Einträge db mit „line_text“ mit „Ergebnis“ wörtlich.

Es scheint wie eine sehr einfache Frage ...

Antwort

33

Versuchen Sie dieses:

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

Du bist ein Heiliger. Werde das akzeptieren, wenn ich nach Hause komme (ich habe eine Zeit, in der ich nicht akzeptieren kann). – PinkElephantsOnParade

+0

Jetzt sollten Sie in der Lage sein zu upvote :) –

+2

Hoffe, Ihre Variable hat keine Regex-Sonderzeichen drin oder das wird scheitern! –

2

Sie können auch die $ regex Option verwenden.

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

werden beide

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

oder

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

Alle anderen Antworten ausfallen können variable auf Ihrer Eingabe abhängig

Sie können RegExp verwenden als andere haben angezeigt, aber Sie müssen spezielle Regex c entkommen Charaktere oder sonst kann das scheitern.

Lodash eine Funktion hat, dies zu tun (wenn Sie es nicht verwenden Sie wahrscheinlich sein sollte, fügt es eine Menge Zucker, die nicht einmal in der ES6 + spec)

https://lodash.com/docs#escapeRegExp

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