Quem já precisou filtrar os dados da base antes de exportar sabe que nem sempre é uma tarefa simples. Quando falamos de mongodb essa situação fica um pouco mais complicada, pois as ferramentas visuais (como Compass e robo 3T) não possuem uma forma direta de salvar as consultas.
Falei besteira?
Comenta no post e me ajuda a melhorar a difusão de conhecimento :)
Para esses casos o mongo possui as ferramentas cli conhecidas como mongoexport
resumo: Exporta os dados em formato json ou csv
Executar o mongoexport é bem direto. No exemplo abaixo já é possível obter uma massa de dados da tabela desejada.
mongoexport mongodb://localhost:27017 --db=example -c=carros
O parâmetro --query
O parâmetro query recebe como valor um json (padrão extended v2) o qual será utilizado como critério pela ferramenta na hora de selecionar quais documentos devem ser exportados.
Os atributos de pesquisa permitidos estão restritos aos query selectors.
Atributos de aggregation não são permitidos
mongoexport mongodb://localhost:27017 --db=example -c=carros --query='{ "modelo":"Dodge", "ano":{ "$gt": 2011 } }'
O parâmetro --queryFile
Já o --queryFile recebe o caminho do arquivo json. Este arquivo funciona da mesma maneira, incluindo as restrições, que o json inline passado no parâmetro --query.
Exemplo de arquivo json
{
"modelo": "Dodge",
"ano": {
"$gt": 2011
}
}
mongoexport mongodb://localhost:27017 --db=example -c=cars --queryFile="~/filtros.json"
Impressões e Conclusão
Dadas as duas abordagens, eu prefiro a segunda por ser mais simples de ler e manter do que a abordagem com a query inline.Porém, se a consulta for simples e pontual (não sendo necessário compartilhá-la ou salvá-la para uso posterior), utilizaria o inline por ser mais direto e menos burocrático.
O que me motivou a escrever esse post foi a necessidade de realizar um export de uma quantidade significativa de dados para outra aplicação sem onerar a aplicação existente. O principal desafio de tal consulta, foi ter de encontrar uma solução que não envolve-se o uso de filtros do método aggregate. Com um pouco de busca na documentação oficial do mongodb, imaginação e validação dos dados(aquele diff salvador), consegui realizar a exportação dos dados.
No github (pasta quering_mongoexport) deixei o passo a passo de como reproduzir esse post.
Referencias
https://docs.mongodb.com/database-tools/mongoexport/
https://docs.mongodb.com/manual/reference/operator/query/#query-selectors
https://docs.mongodb.com/manual/reference/mongodb-extended-json/
Top comments (0)