Bunun oldukça eski bir soru olduğunu ve dizinler de dahil olmak üzere% 100 sadık bir sonuç istiyorsanız mongodump / mongorestore'un açıkça doğru yol olduğunu anlıyorum.
Ancak, özellikle tuhaf bir şey olmaması koşuluyla, MongoDB'nin eski ve yeni sürümleri arasında ileri ve geri uyumlu olabilecek hızlı ve kirli bir çözüme ihtiyacım vardı. Bunun için asıl sorunun cevabını istedim.
Yukarıda kabul edilebilir başka çözümler de var, ancak bu Unix boru hattı nispeten kısa ve tatlı:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Bu, .json
her koleksiyon için uygun şekilde adlandırılmış bir dosya üretir .
Veritabanı adının ("veritabanım") iki kez göründüğünü unutmayın. Ben veritabanı yerel olduğunu ve kimlik bilgilerini geçirmek gerekmez ama her ikisi ile bunu yapmak kolay olduğunu varsayıyorum mongo
vemongoexport
.
grep -v
Unutmak için kullanıyorum system.indexes
, çünkü MongoDB'nin eski bir sürümünün bir sistem koleksiyonunu daha yeni bir sistemden yorumlamaya çalışmasını istemiyorum. Bunun yerine uygulamamın ensureIndex
dizinleri yeniden oluşturmak için olağan çağrılarını yapmasına izin veriyorum .