2012-05-23 9 views
14

Tengo un problema aquí. Quiero consultar mi MongoDB en mi archivo Node JS usando algo como LIKE para un db relacional convencional. El problema es que lo que ME GUSTA no es un literal ... ¡es una variable! No he encontrado una buena manera de hacer esto hasta el momento. Aquí fue el "durrrr primer intento" tiro que tomé en él:Mongo Query con Regex en Nodo JS operando EN UNA 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 se realiza en Mongo ... tengo que correr y esto mach db entradas con "line_text" que contiene "número", literalmente.

Parece una pregunta muy simple ...

Respuesta

33

prueba este:

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

Eres un santo. Lo aceptaré cuando llegue a casa (tengo un momento en el que no puedo aceptarlo). – PinkElephantsOnParade

+0

Ahora debería poder votar :) –

+2

¡Espero que su variable no tenga ningún carácter especial regex o fallará! –

2

También puede utilizar la opción de $ expresiones regulares.

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

Ambos funcionarán

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

Todas las otras respuestas puede fallar dependiendo de la magnitud de entrada

Puede utilizar RegExp como otros tienen indicado, pero debe escapar de expresiones regulares especiales c personajes o de lo contrario, esto puede fallar.

Lodash tiene una función para hacer esto (si no lo está utilizando probablemente debería ser, añade una gran cantidad de azúcar que no es ni siquiera en la especificación ES6 +)

https://lodash.com/docs#escapeRegExp

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

Cuestiones relacionadas