2012-03-30 8 views
13

La documentación Mongoid sólo se da un ejemplo de hacer una búsqueda comodín:¿Cómo se realizan búsquedas de comodines con Mongoid en un entorno de Ruby on Rails?

Person.where(first_name: /^d/i) 

Esto encuentra todas las personas con el primer nombre que empieza con "d".

¿Qué representan el /^ y /i?

¿Cómo puedo encontrar a todas las personas con su nombre con una "na" en el medio de la cadena? Por ejemplo, esta consulta encontraría "jonathan" ya que "na" es una subcadena de la cadena completa.

¿Hay algún sitio web o guía con esta información?

Respuesta

34

Necesita esto para encontrar personas con "na" en el nombre.

Person.where(first_name: /na/i) 

En cuanto a su ejemplo:

Person.where(first_name: /^d/i) 

^ significa "principio de la línea". Esta expresión regular coincidirá con todas las cadenas en donde la primera letra es "d". /i significa "hacer coincidencias insensibles a mayúsculas y minúsculas". Por lo tanto, coincidirá con "d" y "D".

Nota: solo los prefijos de expresiones regulares (con ^ en frente) pueden usar índices.

Is there website or guide with this information?

Aquí está my favourite.

+3

+1 en el enlace a Rubular.com – Joe

+0

¿Es posible hacer una consulta como 'Person.where (first_name:/na/i)' si el campo 'first_name' es de tipo' Mongoid :: EncryptedString'. Estoy usando mongoid 3.1.6 y obtengo * TypeError: no hay conversión implícita de Regexp en String *. –

4

Esto no es una búsqueda "comodín", esto se llama una expresión regular.

/^d/i 
  • Las dos barras son solamente los delimitadores de expresiones regulares, que la búsqueda de lo que está en entre esos dos barras.
  • El siguiente i es un modificador u opción. Cambia el comportamiento de coincidencia de su expresión regular, el i es sinónimo de mayúsculas y minúsculas, significa que coincide con "d" y "D".
  • El primer carácter ^ es un ancla, que ancla el patrón de búsqueda al inicio de la cadena, significa coincidencia "d" sólo en el inicio de la cadena

Un buen tutorial sobre las expresiones regulares es la tutorial on regular-expressions.info

Si desea buscar una cadena en cualquier lugar de la cadena, simplemente elimine el ancla que une el patrón al inicio, /na/ encontrará "na" en cualquier parte de la cadena.