Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การคัดลอกข้อมูลจาก Collection หนึ่งไปยัง Collection ใหม่ใน MongoDB

คัดลอกเอกสารระหว่าง Collections ด้วย $out ใน Aggregation

บทความนี้สาธิตวิธีการคัดลอกข้อมูลจาก Collection เดิมไปสร้าง Collection ใหม่ โดยใช้ Aggregation Pipeline พร้อม Stage $out และ $sample สำหรับสุ่มข้อมูล (ถ้าต้องการ)

ขั้นตอนที่ 1: สร้าง Collection ต้นทาง (sourceCollection)

> db.sourceCollection.insertOne({"EmployeeName":"Robert","EmployeeSalary":15000});
{ "acknowledged": true, "insertedId": ObjectId("5e0397c1f5e889d7a5199506") }
> db.sourceCollection.insertOne({"EmployeeName":"David","EmployeeSalary":25000});
{ "acknowledged": true, "insertedId": ObjectId("5e0397c3f5e889d7a5199507") }
> db.sourceCollection.insertOne({"EmployeeName":"Mike","EmployeeSalary":29000});
{ "acknowledged": true, "insertedId": ObjectId("5e0397c4f5e889d7a5199508") }

ขั้นตอนที่ 2: สร้าง Collection ปลายทาง (destinationCollection)

> db.createCollection('destinationCollection');
{ "ok": 1 }

ขั้นตอนที่ 3: ใช้ Aggregate + $out เพื่อคัดลอก

$sample: { size: 333333 } ใช้สุ่มเอกสาร (ขนาดใหญ่กว่าจำนวนจริง = เอาทั้งหมด แบบสุ่มลำดับ)
$out: "destinationCollection" เขียนผลลัพธ์ไปยัง Collection ใหม่ (จะสร้างใหม่ถ้ายังไม่มี)
allowDiskUse: true อนุญาตใช้ Disk ชั่วคราวสำหรับข้อมูลใหญ่

> db.sourceCollection.aggregate([
    { $sample: { size: 333333 }},
    { $out: "destinationCollection" }
], { allowDiskUse: true });

ขั้นตอนที่ 4: ตรวจสอบข้อมูลใน Collection ใหม่

> db.destinationCollection.find().pretty()

ผลลัพธ์: ข้อมูลถูกคัดลอกครบ (ลำดับอาจสุ่ม)

{ "_id": ObjectId("5e0397c4f5e889d7a5199508"), "EmployeeName": "Mike", "EmployeeSalary": 29000 }
{ "_id": ObjectId("5e0397c3f5e889d7a5199507"), "EmployeeName": "David", "EmployeeSalary": 25000 }
{ "_id": ObjectId("5e0397c1f5e889d7a5199506"), "EmployeeName": "Robert", "EmployeeSalary": 15000 }

สรุป: $out ใน Aggregation Pipeline เป็นวิธีที่มีประสิทธิภาพสำหรับคัดลอก/ย้ายข้อมูลระหว่าง Collections ภายใน Database เดียวกัน รองรับการ Transform ข้อมูลระหว่างทางได้