Mongodb: cara mengelompokkan berdasarkan beberapa bidang
Anda dapat menggunakan sintaks berikut untuk mengelompokkan beberapa bidang dan melakukan agregasi di MongoDB:
db.collection.aggregate([ { $group : { _id :{field1:" $field1 ", field2:" $field2 "}, count :{ $sum :1}}} ])
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: " Mavs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Mavs ", position: " Forward ", points: 19 }) db.teams.insertOne({team: " Rockets ", position: " Guard ", points: 26 }) db.teams.insertOne({team: " Rockets ", position: " Forward ", points: 33 })
Contoh 1: mengelompokkan berdasarkan beberapa bidang dan menggabungkannya
Kita dapat menggunakan kode berikut untuk mengelompokkan berdasarkan “tim” dan “posisi” dan menghitung kemunculan setiap pengelompokan:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, count :{ $sum :1}}} ])
Ini mengembalikan hasil berikut:
{ _id: { team: ' Rockets ', position: ' Forward ' }, count: 1 } { _id: { team: ' Mavs ', position: ' Guard ' }, count: 2 } { _id: { team: ' Mavs ', position: ' Forward ' }, count: 1 } { _id: { team: ' Rockets ', position: ' Guard ' }, count: 1 }
Kami juga dapat melakukan agregasi yang berbeda. Misalnya, kita dapat mengelompokkan berdasarkan “tim” dan posisi” dan mencari jumlah “poin” dengan mengelompokkan:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}} ])
Ini mengembalikan hasil berikut:
{ _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 } { _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 }
Ini memberitahu kita:
- Jumlah poin yang dicetak oleh pemain ‘Rockets’ di posisi ‘Forward’ adalah 33 .
- Jumlah poin yang dicetak oleh pemain ‘Mavs’ di posisi ‘Guard’ adalah 53 .
Dan seterusnya.
Contoh 2: kelompokkan berdasarkan beberapa bidang dan agregat (lalu urutkan)
Kita dapat menggunakan kode berikut untuk mengelompokkan berdasarkan “tim” dan posisi” dan mencari jumlah “poin” dengan mengelompokkannya, lalu mengurutkan hasilnya berdasarkan “poin” dalam urutan menaik :
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}}, { $sort : { sumPoints :1}} ])
Ini mengembalikan hasil berikut:
{ _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 } { _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 }
Kita dapat menggunakan -1 untuk mengurutkan hasil berdasarkan poin dalam urutan menurun :
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}}, { $sort : { sumPoints :-1}} ])
Ini mengembalikan hasil berikut:
{ _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 } { _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 } { _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 }
Catatan : Anda dapat menemukan dokumentasi lengkap untuk $group di sini .