sql >> Base de Datos >  >> NoSQL >> MongoDB

Rails mongoid regex en un campo Integer

La solución MongoDB de la pregunta vinculada sería:

db.models.find({ $where: '/^124/.test(this.number)' })

Cosas que entregas para find mapa más o menos uno a uno a Mongoid:

where(:$where => "/^#{numero.to_i}/.test(this.number)")

El to_i la llamada debería hacer que la interpolación de cadenas esté bien para este caso limitado.

Tenga en cuenta que esto es algo bastante horrible para hacerle a su base de datos:no puede usar índices, escaneará todos los documentos de la colección, ...

Es mejor que use un campo de cadena para que pueda hacer una coincidencia normal de expresiones regulares. Estoy bastante seguro de que MongoDB podrá usar un índice si también ancla su expresión regular al principio. Si realmente necesita que sea un número dentro de la base de datos, siempre puede almacenarlo como un campo de número entero y de cadena:

field :number,   :type => Integer
field :number_s, :type => String

y luego tenga algunos ganchos para mantener :number_s actualizado como :number cambios. Si hiciera esto, su alcance de coincidencia de patrones buscaría en :number_s . Precomputar y duplicar datos como este es bastante común con MongoDB, por lo que no debería sentirse mal por ello.