Я понимаю, что это довольно старый вопрос и что 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
вызовы для воссоздания индексов.