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 .

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *