mongodb aggregate คืออะไรเมื่อเทียบกับ sql
MongoDB Aggregate เป็นวิธีการประมวลผลข้อมูลใน MongoDB ที่สามารถเปรียบเทียบกับ SQL ในการใช้ GROUP BY, HAVING, และ JOIN ได้ โดย Aggregate จะใช้ในการคิวรีข้อมูลที่มีความซับซ้อนหลายขั้นตอน เช่น การกรองข้อมูล, การจัดกลุ่ม, และการคำนวณค่ารวม
- ใน SQL:
GROUP BYจัดกลุ่มข้อมูลHAVINGกรองข้อมูลหลังจากการจัดกลุ่มJOINใช้รวมข้อมูลจากหลายตารางSELECTเลือกข้อมูลที่ต้องการ
- ใน MongoDB:
- ใช้ Aggregate pipeline ซึ่งเป็นการประมวลผลข้อมูลตามลำดับของ stages เช่น
$match(กรองข้อมูล),$group(จัดกลุ่ม),$sort(เรียงลำดับ), และ$lookup(เทียบกับ JOIN ใน SQL)
- ใช้ Aggregate pipeline ซึ่งเป็นการประมวลผลข้อมูลตามลำดับของ stages เช่น
ตัวอย่าง Aggregate:
db.collection.aggregate([
{ $match: { status: "active" } }, // เหมือน WHERE
{ $group: { _id: "$category", total: { $sum: "$amount" } } }, // เหมือน GROUP BY
{ $sort: { total: -1 } } // เหมือน ORDER BY
])
Aggregate จะยืดหยุ่นมากขึ้นในการประมวลผลข้อมูลหลายขั้นตอน
ความแตกต่างระหว่าง MongoDB Aggregate กับ find() คือระดับความซับซ้อนในการคิวรีและการประมวลผลข้อมูล:
1. ความซับซ้อนของการประมวลผลข้อมูล
- ใช้สำหรับดึงข้อมูลแบบพื้นฐาน เช่นการค้นหา (filter) ข้อมูลที่ตรงตามเงื่อนไข
- เหมาะสำหรับการคิวรีข้อมูลง่ายๆ ที่ไม่ต้องการการคำนวณหรือจัดกลุ่มข้อมูล
- ผลลัพธ์จะตรงกับข้อมูลดิบในคอลเลกชัน
- ใช้สำหรับคิวรีที่ซับซ้อนมากขึ้น เช่นการจัดกลุ่ม (
$group), การคำนวณ ($sum,$avg), การรวมข้อมูลจากหลายคอลเลกชัน ($lookup) เป็นต้น - สามารถประมวลผลข้อมูลหลายขั้นตอนในรูปแบบ pipeline ได้ ทำให้สามารถปรับแต่งและจัดการข้อมูลก่อนที่จะได้ผลลัพธ์
aggregate():ตัวอย่าง:
db.collection.aggregate([
{ $match: { status: "active" } },
{ $group: { _id: "$category", total: { $sum: "$amount" } } }
])
find():ตัวอย่าง:
db.collection.find({ status: "active" })
2. ประสิทธิภาพ
find(): เร็วกว่าสำหรับการคิวรีข้อมูลพื้นฐานเพราะไม่ต้องผ่านหลายขั้นตอนของการประมวลผลaggregate(): อาจช้ากว่าเพราะต้องผ่านหลายขั้นตอนในการประมวลผล แต่เหมาะสำหรับการจัดการข้อมูลที่ซับซ้อน
3. ความสามารถในการจัดกลุ่มและคำนวณ
find()ไม่สามารถจัดกลุ่มหรือทำคำนวณซับซ้อนภายในคิวรีได้aggregate()สามารถจัดกลุ่มข้อมูลและคำนวณได้ในระดับลึก