MongoDB Regex Search en valor entero

Quiero regex buscar un valor entero en MongoDB. es posible?

Estoy construyendo una interfaz de tipo CRUD que permite * para comodines en los diversos campos. Estoy tratando de mantener la UI constante para algunos campos que son enteros.

Considerar:

> db.seDemo.insert({ "example" : 1234 }); > db.seDemo.find({ "example" : 1234 }); { "_id" : ObjectId("4bfc2bfea2004adae015220a"), "example" : 1234 } > db.seDemo.find({ "example" : /^123.*/ }); > 

Como puede ver, inserto un objeto y puedo encontrarlo por el valor. Si bash una expresión regular simple, no puedo encontrar el objeto.

¡Gracias!

Si quieres hacer una coincidencia de patrón en números, la forma de hacerlo en mongo es usar la expresión $ where y pasar una coincidencia de patrón.

 > db.test.find({ $where: "/^123.*/.test(this.example)" }) { "_id" : ObjectId("4bfc3187fec861325f34b132"), "example" : 1234 } 

No soy un gran admirador de usar el operador de consulta $where debido a la forma en que evalúa la expresión de consulta y el riesgo de seguridad si la consulta usa datos de entrada del usuario.

Dicho esto, la mejor manera de hacerlo es $project su documento y agregar otro campo calculado que es el valor de cadena de su número.

Los $toLower y sus hermanos $toUpper respectivamente convierten una cadena a minúsculas y mayúsculas, pero tienen una pequeña característica desconocida que es que pueden usarse para convertir números enteros en cadenas.

El operador $match devuelve todos los documentos que coinciden con su patrón utilizando el operador $regex .

 db.seDemo.aggregate( [ { "$project": { "stringifyExample": { "$toLower": "$example" }, "example": 1 }}, { "$match": { "stringifyExample": /^123.*/ } } ] ) 

cuyos rendimientos:

 { "_id" : ObjectId("579c668c1c52188b56a235b7"), "example" : 1234, "stringifyExample" : "1234" } { "_id" : ObjectId("579c66971c52188b56a235b9"), "example" : 12334, "stringifyExample" : "12334" } 

Ahora, si lo que desea es recuperar todo el documento que contiene una subcadena particular, la forma más fácil y mejor de hacerlo es en la próxima versión de MongoDB (al momento de escribir esto) usando el operador $redact que permite un procesamiento de lógica de $cond conditional . $indexOfCP .

 db.seDemo.aggregate([ { "$redact": { "$cond": [ { "$gt": [ { "$indexOfCP": [ { "$toLower": "$example" }, "123" ] }, -1 ] }, "$$KEEP", "$$PRUNE" ] }} ]) 

que produce:

 { "_id" : ObjectId("579c668c1c52188b56a235b7"), "example" : 1234 } { "_id" : ObjectId("579c66971c52188b56a235b9"), "example" : 12334 }