การเพิ่มข้อมูลในอาร์เรย์พร้อมจำกัดขนาด (keep only last N items) ใช้ $push ร่วมกับ $each และ $slice
> db.demo656.insertOne({Name: "John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea060264deddd72997713cf") }
แสดงข้อมูลเริ่มต้น:
> db.demo656.find();
Push ครั้งแรก: เพิ่ม "John" จำกัด 9 รายการล่าสุด
> db.demo656.update({Name: "John"}, {$push: {"ListOfName": {$each: ["John"], $slice: -9}}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.demo656.find();Push ครั้งที่สอง: เพิ่ม "David" จำกัด 9 รายการล่าสุด
> db.demo656.update({Name: "John"}, {$push: {"ListOfName": {$each: ["David"], $slice: -9}}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.demo656.find();Syntax ของ $push พร้อม modifiers
{$push: { field: { $each: [value1, value2, ...], // ค่าที่จะเพิ่ม (หลายค่าได้) $slice: -n, // เก็บแค่ n ตัวล่าสุด (ลบ = ท้าย, บวก = หน้า) $sort: {score: -1}, // เรียงก่อน slice (optional) $position: 0 // แทรกที่ตำแหน่ง (optional) } }}Use Cases
- เก็บประวัติล่าสุด 100 รายการ (Activity feed, Log)
- Leaderboard เก็บ Top 10 scores
- Shopping cart recently viewed products
ประโยชน์: ไม่ต้องเขียนโค้ดตรวจสอบและลบเก่าเอง MongoDB จัดการให้อัตโนมัติแบบ Atomic