บทนี้จะแนะนำ MongoDB Aggregation Pipeline ซึ่งใช้สำหรับการวิเคราะห์ทางสถิติ คล้ายกับคำสั่ง group by ใน SQL ใน MongoDB shell การวิเคราะห์ทางสถิติทำได้ผ่านฟังก์ชัน db.collection.aggregate()

แนวคิด

Aggregation Pipeline เป็นแนวคิดที่ใช้การทำงานร่วมกันของข้อมูลที่มีความคล้ายคลึงกับน้ำไหลผ่านท่อส่งน้ำ เราสามารถประมวลผลข้อมูลในหลาย ๆ สเตจภายในท่อ หลังจากที่สเตจหนึ่งประมวลผลข้อมูลแล้ว ผลลัพธ์ที่ประมวลผลได้จะถูกส่งไปยังสเตจถัดไปเพื่อประมวลผลเพิ่มเติม

ตัวอย่างการใช้ Aggregation Pipeline ในการวิเคราะห์ทางสถิติ:

  • ในสเตจตัวแรกจะคืนข้อมูลเอกสารจากคอลเล็กชันโดยใช้เงื่อนไขบางอย่าง
  • ในสเตจที่สอง ข้อมูลเอกสารที่ได้มาจะถูกจัดกลุ่มและรวมกัน
  • ในสเตจที่สาม ข้อมูลที่รวมกันจากสเตจที่สองจะถูกเรียงลำดับ

การกระบวนการทั้งหมดคล้ายกับการทำงานของท่อที่ข้อมูลไหลเข้ามาจากปลายท่อหนึ่ง ถูกประมวลผลผ่านสเตจหลาย ๆ รอบ และจากนั้นส่งผลลัพธ์สุดท้ายออกมา

ตัวดำเนินการที่รองรับโดย MongoDB Pipeline

ด้านล่างนี้คือตัวดำเนินการที่รองรับโดย MongoDB:

ตัวดำเนินการ รายละเอียด
$match สเตจ $match ใช้สำหรับกรองข้อมูลเอกสารโดยใช้เงื่อนไขคล้ายกับคำสั่ง where ใน SQL
$group สเตจ $group ใช้สำหรับจัดกลุ่มและรวมข้อมูลเอกสารคล้ายกับคำสั่ง group by ใน SQL
$sort ใช้สำหรับเรียงลำดับข้อมูล

ขั้นตอนในการใช้ Aggregation Pipeline

โดยทั่วไปมีขั้นตอนสามขั้นตอน:

  • กรองข้อมูลเป้าหมายโดยใช้ $match
  • จัดกลุ่มและรวมข้อมูลโดยใช้ $group
  • เรียงลำดับผลลัพธ์โดยใช้ $sort (ตัวเลือก)

ตัวอย่าง:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

SQL เทียบเท่า:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

หมายเหตุ: สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการวิเคราะห์ทางสถิติโปรดอ่านต่อในบทถัดไป.