2012-05-23 12 views
14

Ho un problema qui. Voglio interrogare il mio MongoDB nel mio file Node JS usando qualcosa come LIKE per un db relazionale convenzionale. Il problema è la cosa che voglio piacere a non è un letterale ... è una variabile! Non ho ancora trovato un buon modo per farlo. Qui è stato il colpo "Durrr primo tentativo" Ho preso a esso:Query Mongo con Regex in Nodo JS che funziona SU UNA VARIABILE

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 è realizzato in Mongo ... ce l'ho in esecuzione e questo non mach al db voci con "line_text" contenente "risultato", letteralmente.

Sembra una domanda molto semplice ...

risposta

33

provare questo:

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

Sei un santo. Accetterò questo quando torno a casa (ho un tempo in cui non posso accettare). – PinkElephantsOnParade

+0

Ora dovresti essere in grado di upvotare :) –

+2

Spero che la tua variabile non abbia alcun carattere speciale regolare in esso o questo fallirà! –

2

È inoltre possibile utilizzare l'opzione $ regex.

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

Entrambi funzioneranno

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

o

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

Tutte le altre risposte potrebbero non riuscire a seconda del vostro ingresso variabile

È possibile utilizzare RegExp come altri hanno indicato ma è necessario sfuggire alla regex speciale c i personaggi o questo può fallire.

Lodash ha una funzione per fare questo (se non lo si utilizza probabilmente dovrebbe essere, aggiunge un sacco di zucchero che non è nemmeno nelle specifiche ES6 +)

https://lodash.com/docs#escapeRegExp

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

Problemi correlati