แปลง Collection เป็น Capped Collection ด้วย runCommand
Capped Collection เป็นคอลเลกชันที่มีขนาดคงที่ (Fixed Size) ทำงานแบบ Circular Buffer - เมื่อเต็มจะทับข้อมูลเก่าทีละตัว ใช้เหมาะสำหรับ Log, Cache, Real-time data ที่ไม่ต้องเก็บนาน
ตัวอย่างข้อมูลทดสอบ
> db.demo416.insertOne({ "StudentName": "David" });
> db.demo416.insertOne({ "StudentName": "Mike" });
> db.demo416.insertOne({ "StudentName": "Sam" });
แสดงข้อมูลก่อนแปลง
> db.demo416.find();
คำสั่งแปลงเป็น Capped Collection ขนาด 100 ไบต์
> db.runCommand({ convertToCapped: 'demo416', size: 100 });
ผลลัพธ์: { "ok": 1 }
ตรวจสอบสถานะคอลเลกชัน
> db.demo416.stats();
ผลลัพธ์สำคัญจาก stats()
{
"ns": "test.demo416",
"size": 132,
"count": 3,
"capped": true,
"maxSize": 256,
"max": -1,
"ok": 1
}
คำอธิบายฟิลด์สำคัญ
- capped: true: ยืนยันว่าเป็น Capped Collection แล้ว
- size: 132: ขนาดข้อมูลปัจจุบัน (bytes)
- maxSize: 256: ขนาดสูงสุดที่กำหนด (bytes) - โน้ต: size parameter 100 ถูกปรับขั้นต่ำ
- max: -1: ไม่จำกัดจำนวนเอกสาร (จำกัดแค่ขนาด)
ข้อจำกัดของ Capped Collection
- ไม่สามารถ ลบเอกสารเดี่ยว ได้ (ต้อง drop collection ทั้งอัน)
- ไม่สามารถ อัปเดตเอกสารให้ใหญ่ขึ้น ได้ (ต้องมีขนาดเท่าเดิมหรือเล็กลง)
- ไม่รองรับ Sharding
- ไม่มี _id index อัตโนมัติ (ต้องสร้างเองถ้าต้องการ)
- ขนาดขั้นต่ำ ~ 256 bytes (MongoDB จะปรับขึ้นอัตโนมัติ)
การสร้าง Capped Collection ใหม่ (แนะนำมากกว่าการแปลง)
> db.createCollection("logs", { capped: true, size: 1000000, max: 10000 });
ระบุได้ทั้งขนาด (size) และจำนวนเอกสารสูงสุด (max)