DEV Community

Poveda
Poveda

Posted on

Exportando dados filtrados com mongoexport

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
Enter fullscreen mode Exit fullscreen mode

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 } }'
Enter fullscreen mode Exit fullscreen mode

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
    }
}
Enter fullscreen mode Exit fullscreen mode
mongoexport mongodb://localhost:27017 --db=example -c=cars --queryFile="~/filtros.json"
Enter fullscreen mode Exit fullscreen mode

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)