2012-04-14 24 views
5

Parece que no puedo encontrar una respuesta en google, ni en el sitio web de la mangosta, así que lo estoy preguntando aquí. Si es posible, ¿cómo puedo buscar una cadena parcialmente coincidente en un documento?Encontrar la coincidencia de la cadena parcial

ejemplo:

En una colección de usuario: función

{ name: "Louis", location: "Paris, France" }, 
{ name: "Bill", location: "Paris, Illinoid" }, 
{ name: "Stephen", location: "Toronto, Ontario" } 

mangosta:

searchForCity("Paris"); 

El resultado sería una lista de documentos de la colección del usuario que tiene "París" en el ubicación Cadena. por ejemplo:

[ 
    { name: "Louis", location: "Paris, France" }, 
    { name: "Homer", location: "Paris, Illinois" } 
] 
+0

Hiya espero que esto ayude: http://www.mongodb.org/display/DOCS/Adquirir+Queries busque. Find tenga una buena, ¡salud! –

Respuesta

16

Se puede usar un regex para ello:

Query#regex, Query#$regex

Especifica el operador $regex.

query.regex('name.first', /^a/i) 

Así que algo como esto:

User.where('location').$regex(/Paris/); 
User.where('location').$regex(/paris/i); // Case insensitive version 

Tenga en cuenta que las consultas de expresiones regulares pueden ser muy caros como MongoDB tendrá que ejecutar la expresión regular contra todos y cada uno location. Si se puede anclar sus expresiones regulares al principio:

User.where('location').$regex(/^Paris/); 

entonces usted puede indexar la ubicación y MongoDB utilizará ese índice.

+2

Funcionó perfectamente, tuvo que agregar: var expression = new RegExp (palabra, "i") ;, fueron word = "Paris"; esto es que puedo incluir variables allí. – guiomie

+0

¿Hay una solución de mangosta? – chovy

+0

@chovy Um, ¿qué parte de la respuesta * no es * una solución Mongoose? –

Cuestiones relacionadas