Mongodb: วิธีจัดกลุ่มตามและนับ
คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อจัดกลุ่มและนับใน MongoDB:
db.collection.aggregate([ { $group : { _id : " $field_name ", count :{ $sum :1}}} ])
โปรดทราบว่า field_name คือฟิลด์ที่คุณต้องการจัดกลุ่ม
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้กับ ทีม คอลเลกชันที่มีเอกสารต่อไปนี้:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Spurs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
ตัวอย่างที่ 1: จัดกลุ่มตามและนับ
เราสามารถใช้โค้ดต่อไปนี้เพื่อจัดกลุ่มตามฟิลด์ “ตำแหน่ง” และนับจำนวนครั้งของแต่ละตำแหน่ง
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum :1}}} ])
สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:
{ _id: ' Forward ', count: 1 } { _id: ' Guard ', count: 3 } { _id: ' Center ', count: 1 }
สิ่งนี้บอกเรา:
- ตำแหน่ง “เดินหน้า” ปรากฏ 1 ครั้ง
- ตำแหน่ง “ยาม” ปรากฏ 3 ครั้ง
- ตำแหน่ง “กลาง” ปรากฏ 1 ครั้ง
ตัวอย่างที่ 2: จัดกลุ่มตามและนับ (จากนั้นเรียงลำดับ)
เราสามารถใช้โค้ดต่อไปนี้เพื่อนับการเกิดขึ้นของแต่ละตำแหน่งและเรียง ลำดับผลลัพธ์โดยอัตโนมัติจากน้อยไปหามาก :
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum :1}}}, { $sort : { count : 1}} ])
สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:
{ _id: ' Forward ', count: 1 } { _id: ' Center ', count: 1 } { _id: ' Guard ', count: 3 }
เราสามารถใช้ -1 ในอาร์กิวเมนต์การนับเพื่อเรียง ลำดับผลลัพธ์จากมากไปน้อย :
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum :1}}}, { $sort : { count :-1}} ])
สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:
{ _id: ' Guard ', count: 3 } { _id: ' Forward ', count: 1 } { _id: ' Center ', count: 1 }
หมายเหตุ : คุณสามารถค้นหาเอกสารฉบับเต็มสำหรับ $group ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่นๆ ใน MongoDB:
MongoDB: วิธีจัดกลุ่มตามและผลรวม
MongoDB: วิธีนับค่าที่แตกต่างกันในฟิลด์
MongoDB: วิธีจัดกลุ่มตามหลายฟิลด์