Estou tentando executar uma consulta regex usando o pymongo em um servidor mongodb. A estrutura do documento é a seguinte
{
"files": [
"File 1",
"File 2",
"File 3",
"File 4"
],
"rootFolder": "/Location/Of/Files"
}
Quero obter todos os arquivos que correspondam ao padrão * Arquivo. Eu tentei fazer isso como tal
db.collectionName.find({'files':'/^File/'})
No entanto, não recebo nada de volta, estou perdendo alguma coisa porque, de acordo com os documentos do mongodb, isso deve ser possível. Se eu executar a consulta no console mongo, ela funciona bem, isso significa que a API não a suporta ou eu estou apenas usando incorretamente
^
) são capazes de usar índices no banco de dados e, nesse caso, serão executados muito mais rapidamente.Acontece que as pesquisas regex são feitas de maneira um pouco diferente no pymongo, mas é igualmente fácil.
Regex é feito da seguinte maneira:
Isso corresponderá a todos os documentos que possuem uma propriedade de arquivos que possui um item que começa com Arquivo
fonte
$regex
. A resposta de Eric é a maneira python que é um pouco diferente.$regex
operador do Mongo aceita uma$options
discussão.r'^File'
em vez de'^File'
evitar outro problemaPara evitar a compilação dupla, você pode usar o wrapper bson regex que acompanha o PyMongo:
O Regex apenas armazena a string sem tentar compilá-la, portanto, find_one pode detectar o argumento como um tipo 'Regex' e formar a consulta Mongo apropriada.
Eu sinto que esse caminho é um pouco mais pitônico do que a outra resposta principal, por exemplo:
Vale a pena ler na documentação do bson Regex se você planeja usar consultas regex porque existem algumas ressalvas.
fonte
bson.regex.Regex
vai fazer o truque!A solução de
re
não usa o índice. Você deve usar comandos como:db.collectionname.find({'files':{'$regex':'^File'}})
(Não posso comentar abaixo das respostas deles, por isso respondo aqui)
fonte