การเรียนรู้ MongoDB Aggregation Framework
บทนำ
MongoDB Aggregation Framework เป็นเครื่องมือที่ทรงพลังในการประมวลผลข้อมูลและวิเคราะห์ข้อมูลที่ซับซ้อน ช่วยให้เราสามารถเปลี่ยนรูปแบบข้อมูลและคำนวณค่าได้ในหลายขั้นตอนผ่านการใช้ aggregation pipeline
โครงสร้างพื้นฐานของ Aggregation Pipeline
Aggregation Pipeline ประกอบด้วยชุดของ stages (ขั้นตอน) ที่ดำเนินการกับเอกสารในคอลเลคชัน โดยแต่ละขั้นตอนจะรับข้อมูลจากขั้นตอนก่อนหน้าและส่งออกข้อมูลไปยังขั้นตอนถัดไป
ตัวอย่างโครงสร้าง:
// การเรียกใช้ aggregation pipeline
db.collection.aggregate([
{ stage1 },
{ stage2 },
...
]);
ขั้นตอนหลัก (Stages) ที่สำคัญใน Aggregation Framework
1. $match
ใช้สำหรับกรองข้อมูลตามเงื่อนไขที่กำหนด (คล้ายกับ find())
// ตัวอย่าง: ดึงข้อมูลผู้ใช้ที่อายุมากกว่า 25
db.users.aggregate([
{ $match: { age: { $gt: 25 } } }
]);
2. $group
ใช้สำหรับจัดกลุ่มข้อมูลตามฟิลด์ และสามารถใช้ฟังก์ชันสะสม (Accumulator Functions) เช่น $sum, $avg, $min, $max
// ตัวอย่าง: คำนวณจำนวนผู้ใช้ในแต่ละเมือง
db.users.aggregate([
{
$group: {
_id: "$city",
totalUsers: { $sum: 1 }
}
}
]);
3. $project
ใช้เพื่อเลือกหรือสร้างฟิลด์ใหม่ในผลลัพธ์
// ตัวอย่าง: แสดงเฉพาะฟิลด์ชื่อและอายุ
db.users.aggregate([
{
$project: {
name: 1,
age: 1,
_id: 0
}
}
]);
4. $sort
ใช้เพื่อจัดเรียงเอกสารในผลลัพธ์
// ตัวอย่าง: เรียงข้อมูลผู้ใช้ตามอายุจากมากไปน้อย
db.users.aggregate([
{ $sort: { age: -1 } }
]);
5. $limit
ใช้เพื่อจำกัดจำนวนเอกสารในผลลัพธ์
// ตัวอย่าง: ดึงข้อมูลผู้ใช้เพียง 5 คนแรก
db.users.aggregate([
{ $limit: 5 }
]);
6. $skip
ใช้เพื่อข้ามเอกสารในผลลัพธ์
// ตัวอย่าง: ข้ามผู้ใช้ 10 คนแรก
db.users.aggregate([
{ $skip: 10 }
]);
7. $unwind
ใช้สำหรับ "แยก" ค่าในอาเรย์ให้กลายเป็นเอกสารหลายรายการ
// ตัวอย่าง: แยกแท็กในอาเรย์ "tags"
db.articles.aggregate([
{ $unwind: "$tags" }
]);
ตัวอย่างการใช้งาน Aggregation Framework
ตัวอย่าง: คำนวณยอดขายรวมของแต่ละสินค้า
// คำนวณยอดขายรวมของสินค้า
db.sales.aggregate([
{
$group: {
_id: "$product",
totalSales: { $sum: "$amount" }
}
},
{ $sort: { totalSales: -1 } }
]);
ตัวอย่าง: การวิเคราะห์ข้อมูลผู้ใช้
// แสดงข้อมูลสรุปผู้ใช้ตามอายุ
db.users.aggregate([
{ $match: { age: { $gte: 18 } } },
{
$group: {
_id: null,
avgAge: { $avg: "$age" },
minAge: { $min: "$age" },
maxAge: { $max: "$age" }
}
}
]);
ฟังก์ชันสะสม (Accumulator Functions)
| ฟังก์ชัน | คำอธิบาย |
|---|---|
$sum | ผลรวมของค่าทั้งหมด |
$avg | ค่าเฉลี่ยของค่าทั้งหมด |
$min | ค่าน้อยที่สุด |
$max | ค่ามากที่สุด |
$push | รวมค่าเข้าในอาเรย์ |
$addToSet | รวมค่าเฉพาะที่ไม่ซ้ำกันเข้าในอาเรย์ |
ข้อดีของ Aggregation Framework
- ลดความซับซ้อนในการจัดการข้อมูล
- รองรับการประมวลผลข้อมูลขนาดใหญ่
- มีประสิทธิภาพสูงเมื่อเปรียบเทียบกับการเขียน Query ซับซ้อน
สรุป
MongoDB Aggregation Framework เป็นเครื่องมือที่ทรงพลังสำหรับการจัดการและวิเคราะห์ข้อมูล การทำความเข้าใจ stages และฟังก์ชันต่าง ๆ จะช่วยให้สามารถสร้าง pipeline ที่ตอบโจทย์ความต้องการได้อย่างมีประสิทธิภาพ