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

หาค่าที่ซ้ำมากที่สุดในอาร์เรย์ (Top Count) ด้วย MongoDB Aggregation

ใช้ Aggregation Framework นับความถี่และหาค่าที่มากที่สุด

เมื่อต้องการทราบว่าในอาร์เรย์ของหลายเอกสาร ค่าไหนปรากฏบ่อยที่สุด ใช้ Pipeline: $unwind → $group → $sort → $limit

ตัวอย่างข้อมูล: วิชาที่นักเรียนเรียน

> db.topCountArrayDemo.insertOne({"StudentId":101, "StudentSubject":["C", "MongoDB"]});
> db.topCountArrayDemo.insertOne({"StudentId":102, "StudentSubject":["C", "Java"]});
> db.topCountArrayDemo.insertOne({"StudentId":103, "StudentSubject":["C", "MongoDB"]});

Pipeline หา 2 วิชาที่นิยมมากที่สุด

> db.topCountArrayDemo.aggregate([
    { $unwind: "$StudentSubject" },                    // แบนอาร์เรย์: 1 วิชา = 1 เอกสาร
    { $group: { _id: "$StudentSubject", Frequency: { $sum: 1 } } }, // นับจำนวน
    { $sort: { Frequency: -1 } },                      // เรียงมากไปน้อย
    { $limit: 2 }                                      // เอา 2 อันแรก
]).pretty();

ผลลัพธ์

{ "_id" : "C", "Frequency" : 3 }
{ "_id" : "MongoDB", "Frequency" : 2 }

คำอธิบาย

  • วิชา C ปรากฏในทุกเอกสาร (3 ครั้ง)
  • วิชา MongoDB ปรากฏ 2 ครั้ง
  • วิชา Java ปรากฏ 1 ครั้ง (ไม่เข้าทอป 2)

การประยุกต์ใช้

  • หา Tag/Hashtag ยอดนิยม
  • วิเคราะห์สินค้าที่มักซื้อร่วมกัน
  • ตรวจจับค่าผิดปกติ (Anomaly Detection) จากความถี่