Я розумію, що це досить давнє питання, і що mongodump / mongorestore - це явно правильний шлях, якщо ви хочете 100% вірного результату, включаючи індекси.
Однак мені було потрібно швидке і брудне рішення, яке, ймовірно, буде вперед і назад сумісним між старою та новою версіями MongoDB, за умови, що там нічого особливо дурного не відбувається. І для цього я хотів відповісти на початкове запитання.
Вище є інші прийнятні рішення, але цей конвеєр Unix порівняно короткий і милий:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Це дає належну назву .json
файл для кожної колекції.
Зауважте, що ім'я бази даних ("mydatabase") з'являється двічі. Я припускаю, що база даних локальна, і вам не потрібно передавати облікові дані, але це легко зробити з обома mongo
і mongoexport
.
Зауважте, що я використовую grep -v
для відмови system.indexes
, тому що я не хочу, щоб старіша версія MongoDB намагалася інтерпретувати колекцію системи від нової. Натомість я дозволяю моїй заяві зробити її звичайноюensureIndex
дзвінки, щоб відтворити індекси.