Sei que essa é uma pergunta bastante antiga e que o mongodump / mongorestore é claramente o caminho certo se você deseja um resultado 100% fiel, incluindo índices.
No entanto, eu precisava de uma solução rápida e suja que provavelmente seria compatível com versões anteriores e anteriores entre as versões antiga e nova do MongoDB, desde que não haja nada de especialmente estranho. E por isso eu queria a resposta para a pergunta original.
Existem outras soluções aceitáveis acima, mas esse pipeline Unix é relativamente curto e agradável:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Isso produz um .json
arquivo com nome apropriado para cada coleção.
Observe que o nome do banco de dados ("mydatabase") aparece duas vezes. Estou assumindo que o banco de dados é local e você não precisa passar credenciais, mas é fácil fazer isso com ambos mongo
e mongoexport
.
Observe que estou usando o grep -v
descarte system.indexes
, porque não quero que uma versão mais antiga do MongoDB tente interpretar uma coleção de sistemas de uma mais nova. Em vez disso, estou permitindo que meu aplicativo faça suas ensureIndex
chamadas habituais para recriar os índices.