Mongodb: วิธีจัดกลุ่มตามและผลรวม


คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อจัดกลุ่มและนับใน MongoDB:

 db.collection.aggregate([
    { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}}
])

โปรดทราบว่า field_name1 คือฟิลด์ที่คุณต้องการจัดกลุ่มและ field_name2 คือฟิลด์ที่คุณต้องการหาผลรวม

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้กับ ทีม คอลเลกชันที่มีเอกสารต่อไปนี้:

 db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 })
db.teams.insertOne({team: " Spurs ", position: " Forward ", 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 : " $points "}}}
])

สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:

 { _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }
{ _id: ' Center ', count: 19 }

สิ่งนี้บอกเรา:

  • ผู้เล่นในตำแหน่ง “ผู้โจมตี” มีทั้งหมด 48 แต้ม
  • ผู้เล่นที่มีตำแหน่ง “การ์ด” มีทั้งหมด 64 แต้ม
  • ผู้เล่นในตำแหน่ง “เซ็นเตอร์” มีทั้งหมด 19 แต้ม

ตัวอย่างที่ 2: จัดกลุ่มตามและเพิ่ม (จากนั้นเรียงลำดับ)

เราสามารถใช้โค้ดต่อไปนี้เพื่อค้นหาผลรวมของคะแนนสำหรับแต่ละตำแหน่งและเรียง ลำดับ ผลลัพธ์โดยอัตโนมัติจากน้อยไปหามาก:

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count : 1}} 
])

สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:

 { _id: ' Center ', count: 19 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }

ผลลัพธ์จะจัดเรียงตามจุด ตามลำดับ จากน้อยไปหามาก (จากน้อยไปหามาก)

เราสามารถใช้ -1 ในอาร์กิวเมนต์การนับเพื่อเรียง ลำดับผลลัพธ์จากมากไปน้อย :

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count :-1}} 
])

สิ่งนี้จะส่งกลับผลลัพธ์ต่อไปนี้:

 { _id: ' Guard ', count: 64 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Center ', count: 19 }

โปรดทราบว่าผลลัพธ์จะจัดเรียงตามจุด ตามลำดับ จากมากไปน้อย (มากไปน้อย)

หมายเหตุ : คุณสามารถค้นหาเอกสารฉบับเต็มสำหรับ $group ได้ที่นี่

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่นๆ ใน MongoDB:

MongoDB: วิธีนับค่าที่แตกต่างกันในฟิลด์
MongoDB: วิธีจัดกลุ่มตามหลายฟิลด์
MongoDB: วิธีจัดกลุ่มตามและนับ

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *