Saya menyadari bahwa ini adalah pertanyaan yang cukup lama dan bahwa mongodump / mongorestore jelas merupakan cara yang tepat jika Anda menginginkan hasil yang 100% setia, termasuk indeks.
Namun, saya membutuhkan solusi cepat dan kotor yang mungkin kompatibel dengan versi maju dan mundur antara MongoDB versi lama dan baru, asalkan tidak ada yang aneh terjadi. Dan untuk itu saya menginginkan jawaban untuk pertanyaan awal.
Ada solusi lain yang dapat diterima di atas, tetapi pipa Unix ini relatif pendek dan manis:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Ini menghasilkan .json
file dengan nama yang sesuai untuk setiap koleksi.
Perhatikan bahwa nama database ("mydatabase") muncul dua kali. Saya berasumsi bahwa basis datanya adalah lokal dan Anda tidak perlu memberikan kredensial tetapi mudah melakukannya dengan keduanya mongo
dan mongoexport
.
Perhatikan bahwa saya menggunakan grep -v
untuk membuang system.indexes
, karena saya tidak ingin versi MongoDB yang lebih lama mencoba menafsirkan kumpulan sistem dari yang lebih baru. Alih-alih, saya mengizinkan aplikasi saya melakukan ensureIndex
panggilan biasa untuk membuat ulang indeks.