Me doy cuenta de que esta es una pregunta bastante antigua y que mongodump / mongorestore es claramente la forma correcta si desea un resultado 100% fiel, incluidos los índices.
Sin embargo, necesitaba una solución rápida y sucia que probablemente fuera compatible con versiones anteriores y nuevas de MongoDB, siempre que no haya nada especialmente extraño. Y para eso quería la respuesta a la pregunta original.
Hay otras soluciones aceptables arriba, pero esta tubería de Unix es relativamente corta y dulce:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Esto produce un .json
archivo con el nombre apropiado para cada colección.
Tenga en cuenta que el nombre de la base de datos ("mydatabase") aparece dos veces. Supongo que la base de datos es local y no necesita pasar credenciales, pero es fácil hacerlo con ambos mongo
y mongoexport
.
Tenga en cuenta que estoy usando grep -v
para descartar system.indexes
, porque no quiero que una versión anterior de MongoDB intente interpretar una colección del sistema de una nueva. En cambio, estoy permitiendo que mi aplicación realice sus ensureIndex
llamadas habituales para recrear los índices.