ใช้ forEach() วนลูปผลลัพธ์ find() แล้ว insert() ลงคอลเลกชันอื่น (อาจเป็นใน DB เดียวกันหรือ DB อื่น)
ตัวอย่างข้อมูลทดสอบ
> db.demo43.insertOne({"StudentName":"Chris"});
> db.demo43.insertOne({"StudentName":"Bob"});
> db.demo43.insertOne({"StudentName":"David"});
แสดงข้อมูลต้นทาง
> db.demo43.find();
{
"_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris"
}
{
"_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob"
}
{
"_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David"
}
คำสั่งคัดลอกข้อมูลไป demo44 (Temp Collection)
> db.demo43.find().forEach(function(myDocument) {
db.demo44.insert(myDocument);
})
ตรวจสอบข้อมูลใน demo44
> db.demo44.find();
{
"_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris"
}
{
"_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob"
}
{
"_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David"
}
ข้อสังเกต: _id ถูกคัดลอกไปด้วย (เพราะ insert ไม่สร้าง _id ใหม่ถ้ามีอยู่แล้ว) หากต้องการ _id ใหม่ ให้ delete myDocument._id ก่อน insert
ทางเลือกสมัยใหม่: ใช้ db.demo43.aggregate([{$out: "demo44"}]) หรือ $merge (MongoDB 4.2+) ซึ่งเร็วกว่าและเป็น Atomic