Estoy tratando de realizar una consulta de expresiones regulares usando pymongo contra un servidor mongodb. La estructura del documento es la siguiente
{
"files": [
"File 1",
"File 2",
"File 3",
"File 4"
],
"rootFolder": "/Location/Of/Files"
}
Quiero obtener todos los archivos que coinciden con el patrón * Archivo. Traté de hacer esto como tal
db.collectionName.find({'files':'/^File/'})
Sin embargo, no recibo nada, me estoy perdiendo algo porque, según los documentos de mongodb, esto debería ser posible. Si realizo la consulta en la consola mongo, funciona bien, ¿significa que la API no es compatible o simplemente la estoy usando incorrectamente?
^
) pueden usar índices en la base de datos, y en ese caso se ejecutarán mucho más rápido.Resulta que las búsquedas de expresiones regulares se realizan de manera un poco diferente en Pymongo, pero es igual de fácil.
Regex se realiza de la siguiente manera:
Esto coincidirá con todos los documentos que tienen una propiedad de archivos que tiene un elemento que comienza con Archivo
fuente
$regex
. La respuesta de @ Eric es la forma de Python que es un poco diferente.$regex
operador de Mongo toma una$options
discusión.r'^File'
en lugar de'^File'
evitar otro problemaPara evitar la doble compilación, puede usar el contenedor bson regex que viene con PyMongo:
Regex simplemente almacena la cadena sin intentar compilarla, por lo que find_one puede detectar el argumento como un tipo 'Regex' y formar la consulta Mongo adecuada.
Siento que de esta manera es un poco más Pythonic que la otra respuesta principal, por ejemplo:
Vale la pena leer la documentación de bson Regex si planea usar consultas de expresiones regulares porque hay algunas advertencias.
fuente
bson.regex.Regex
hará el truco!La solución de
re
no usa el índice en absoluto. Deberías usar comandos como:db.collectionname.find({'files':{'$regex':'^File'}})
(No puedo comentar debajo de sus respuestas, así que respondo aquí)
fuente