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

ใช้ $push และ $slice หลายครั้งใน MongoDB จำกัดขนาดอาร์เรย์

การเพิ่มข้อมูลในอาร์เรย์พร้อมจำกัดขนาด (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