ฉันรู้ว่านี่เป็นคำถามที่ค่อนข้างเก่าและ 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
โทรตามปกติเพื่อสร้างดัชนีใหม่