MongoDB Aggregation

ณัฐธิดา  หมวดเพ็ชร

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)

aggregate