Mir ist klar, dass dies eine ziemlich alte Frage ist und dass Mongodump / Mongorestore eindeutig der richtige Weg ist, wenn Sie ein 100% originalgetreues Ergebnis erzielen möchten, einschließlich Indizes.
Ich brauchte jedoch eine schnelle und schmutzige Lösung, die wahrscheinlich vorwärts- und rückwärtskompatibel zwischen alten und neuen Versionen von MongoDB ist, vorausgesetzt, es ist nichts besonders Verrücktes los. Und dafür wollte ich die Antwort auf die ursprüngliche Frage.
Es gibt andere akzeptable Lösungen, aber diese Unix-Pipeline ist relativ kurz und süß:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Dadurch wird .json
für jede Sammlung eine entsprechend benannte Datei erstellt.
Beachten Sie, dass der Datenbankname ("mydatabase") zweimal angezeigt wird. Ich gehe davon aus, dass die Datenbank lokal ist und Sie keine Anmeldeinformationen übergeben müssen, aber das ist mit beiden mongo
und einfach mongoexport
.
Beachten Sie, dass ich grep -v
zum Verwerfen verwende system.indexes
, da ich nicht möchte, dass eine ältere Version von MongoDB versucht, eine Systemsammlung aus einer neueren zu interpretieren. Stattdessen erlaube ich meiner Anwendung, ihre üblichen ensureIndex
Aufrufe durchzuführen, um die Indizes neu zu erstellen.