Mongodb: cara mengelompokkan berdasarkan dan menjumlahkan
Anda dapat menggunakan sintaks berikut untuk mengelompokkan dan menghitung di MongoDB:
db.collection.aggregate([ { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}} ])
Perhatikan bahwa nama_bidang1 adalah bidang yang ingin Anda kelompokkan dan nama_bidang2 adalah bidang yang ingin Anda jumlahkan.
Contoh berikut memperlihatkan cara menggunakan sintaksis ini dengan tim koleksi dengan dokumen berikut:
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 })
Contoh 1: mengelompokkan berdasarkan dan menjumlahkan
Kita dapat menggunakan kode berikut untuk mengelompokkan berdasarkan kolom “posisi” dan menghitung jumlah poin untuk setiap posisi.
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}} ])
Ini mengembalikan hasil berikut:
{ _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 } { _id: ' Center ', count: 19 }
Ini memberitahu kita:
- Pemain di posisi “Penyerang” memiliki total 48 poin.
- Pemain dengan posisi “Penjaga” memiliki total 64 poin.
- Pemain di posisi “Tengah” memiliki total 19 poin.
Contoh 2: kelompokkan berdasarkan dan tambahkan (lalu urutkan)
Kita dapat menggunakan kode berikut untuk mencari jumlah poin untuk setiap posisi dan secara otomatis mengurutkan hasilnya dalam urutan menaik :
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count : 1}} ])
Ini mengembalikan hasil berikut:
{ _id: ' Center ', count: 19 } { _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 }
Hasilnya diurutkan berdasarkan poin dalam urutan menaik (dari yang terkecil hingga yang terbesar).
Kita dapat menggunakan -1 dalam argumen count untuk mengurutkan hasil dalam urutan menurun :
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count :-1}} ])
Ini mengembalikan hasil berikut:
{ _id: ' Guard ', count: 64 } { _id: ' Forward ', count: 48 } { _id: ' Center ', count: 19 }
Perhatikan bahwa hasilnya diurutkan berdasarkan titik dalam urutan menurun (dari terbesar ke terkecil).
Catatan : Anda dapat menemukan dokumentasi lengkap untuk $group di sini .
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan operasi umum lainnya di MongoDB:
MongoDB: Cara menghitung nilai berbeda dalam suatu bidang
MongoDB: Cara mengelompokkan berdasarkan beberapa bidang
MongoDB: Cara mengelompokkan dan menghitung