ใน MongoDB สามารถสลับระหว่างฐานข้อมูลได้ด้วยคำสั่ง use และคัดลอกข้อมูลจากคอลเลกชันในฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่งได้
ขั้นตอนการย้ายข้อมูล
1. สร้างข้อมูลต้นทาง (ใน database "test")
> db.insertOneRecordDemo.insertOne({"UserName":"Larry","UserAge":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9534de16f542d757e2b452") }
> db.insertOneRecordDemo.insertOne({"UserName":"Chris","UserAge":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9534e816f542d757e2b453") }
> db.insertOneRecordDemo.insertOne({"UserName":"David","UserAge":25});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9534f116f542d757e2b454") }
2. ดึงข้อมูลทั้งหมดและสลับไปยัง database ปลายทาง
> var AllDocumentsFromSourceCollection = db.insertOneRecordDemo.find();
> use sample;
switched to db sample
> AllDocumentsFromSourceCollection.forEach(function(allRecords){
db.getAllRecordsFromSourceCollectionDemo.insert(allRecords)
});
3. ตรวจสอบข้อมูลที่ย้ายแล้ว
> db.getAllRecordsFromSourceCollectionDemo.find().pretty();
{ "_id" : ObjectId("5c9534de16f542d757e2b452"), "UserName" : "Larry", "UserAge" : 23 }
{ "_id" : ObjectId("5c9534e816f542d757e2b453"), "UserName" : "Chris", "UserAge" : 26 }
{ "_id" : ObjectId("5c9534f116f542d757e2b454"), "UserName" : "David", "UserAge" : 25 }
4. ตรวจสอบว่าคอลเลกชันถูกสร้างใน database ใหม่
> show collections;
สรุป
วิธีนี้ใช้ cursor จาก find() เก็บไว้ในตัวแปร แล้วสลับ database ด้วย use และใช้ forEach วนลูป insert เข้าไปในคอลเลกชันใหม่ _id จะคงค่าเดิม (ไม่สร้างใหม่) ซึ่งอาจต้องระวังกรณี _id ซ้ำ