ณัฐธิดา หมวดเพ็ชร
MongoDB Aggregation
Aggregation เป็นขั้นตอนของการรวบรวมข้อมูล โดยสามารถรวบรวมข้อมูลที่ได้มาจากหลายๆที่ให้อยู่ร่วมกันเป็นกลุ่มข้อมูลเดียวกัน และยังสามารถเพิ่มความหลากหลายในการรวบรวมข้อมูลได้ ซึ่งจะ return ผลลัพธ์ที่ได้จากการคำนวณกลับมาให้ โดยผลลัพธ์ขึ้นอยู่กับการ input ข้อมูลและการเจาะจงข้อมูล
Aggregation Pipelines คือวิธีแบบหนึ่งของ aggregation ซึ่งเป็น framework ตัวหนึ่งสำหรับการรวบรวมข้อมูลในรูปแบบแนวคิดของการประมวลผลข้อมูลแบบท่อ ที่ส่งต่อไปได้เรื่อยๆ โดยสามารถส่งต่อได้หลายๆ stage เพื่อแปลงเป็นผลลัพธ์ที่ถูก aggregate แล้ว
Aggregation Pipeline ประกอบไปด้วย stages ซึ่งแต่ละ stage จะทำการเปลี่ยนแปลงเอกสารที่ผ่านมาทาง pipeline เพราะฉะนั้น pipeline stage ไม่จำเป็นต้องผลิตเอกสารการส่งออกอย่างใดอย่างหนึ่งสำหรับทุกๆการป้อนข้อมูล
MongoDB ได้ให้ method การ aggregate คือ db.collection.aggregate( [ { <stage> }, … ] ) และให้คำสั่งในการ aggregate สำหรับ aggregation pipeline
Stage Operators สำหรับ stage ที่มีอยู่มีดังนี้
- $project >> เปลี่ยนรูปร่างของแต่ละ document ใน stream เช่น การเพิ่ม field ใหม่ หรือการลบ field ที่มีอยู่ สำหรับแต่ละ document ที่ได้ input และ output อย่างใดอย่างหนึ่ง
- $match >> เป็นตัวกรอก stream ให้อนุญาตเพียง document ที่ตรงกันผ่านเข้าสู่ขั้นตอนใน pipeline ต่อไป
- $redact >> เปลี่ยนรูปร่างของแต่ละ document ใน stream โดยการจำกัดเนื้อหาของแต่ละ document ขึ้นอยู่กับข้อมูลที่ถูกเก็บไว้ใน documents themselves
- $limit >> ผ่าน document n แรกที่ยังไม่ถูกแปรไปยัง pipeline โดยที่ n คือขีดจำกัดที่ถูกกำหนด สำหรับแต่ละ document ที่ได้ input / output อย่างใดอย่างหนึ่ง
- $skip >> การมองข้าม document n แรก โดยที่ n คือจำนวนที่ถูกระบุไว้ให้ข้ามและผ่านเอกสารส่วนที่เหลือที่ยังไม่ถูกแปรไปยัง pipeline สำหรับแต่ละ document ที่ input/output อย่างใดอย่างหนึ่งเป็นศูนย์
- $unwind
- $group >> เป็นการระบุกลุ่มที่ต้องการนำไปแสดง ผลลัพธ์จะได้เพียงฟิลด์ที่ระบุ
- $sort >> การจัดลำดับ stream โดย key ถูกเรียงไว้ตามที่กำหนด โดยเฉพาะการเปลียนแปลงคำสั่ง document จะยังคงไม่ถูกแปร
- $geoNear >> จะ return stream ที่ได้รับคำสั่งของ document ที่ขึ้นอยู่กับความใกล้ชิดไปยังจุดที่พิกัดไว้ จุดพิกัดประกอบด้วยฟังชั่น $match, $sort และ $limit
- $out >> เป็นการเขียนผลลัพธ์ของ document ของการจัดเก็บ aggregation pipeline โดยจะใช้ stage นี้เป็นขั้นตอนสุดท้ายใน pipeline
ตัวอย่างของการ aggregate (โดยใช้ stage แบบ $match กับ $group)