Mongodb: birden fazla alana göre nasıl gruplandırılır


MongoDB’de birden fazla alanı gruplamak ve toplama gerçekleştirmek için aşağıdaki sözdizimini kullanabilirsiniz:

 db.collection.aggregate([
    { $group : { _id :{field1:" $field1 ", field2:" $field2 "}, count :{ $sum :1}}}
])

Aşağıdaki örnekler, bu sözdiziminin aşağıdaki belgelere sahip bir koleksiyon ekibiyle nasıl kullanılacağını gösterir:

 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 })

Örnek 1: birkaç alana göre gruplandırın ve toplayın

“Takım” ve “pozisyon”a göre gruplamak ve her gruplamanın oluşumlarını saymak için aşağıdaki kodu kullanabiliriz:

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

Bu, aşağıdaki sonuçları döndürür:

 { _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 }

Farklı bir toplama da yapabiliriz. Örneğin, “takıma” ve pozisyona göre gruplandırabilir ve gruplandırarak “puanların” toplamını bulabiliriz:

 db.teams.aggregate([
    { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}}
])

Bu, aşağıdaki sonuçları döndürür:

 { _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 }

Bu bize şunu söylüyor:

  • ‘Rockets’ oyuncularının ‘Forvet’ pozisyonunda kazandığı puanların toplamı 33’tür .
  • ‘Guard’ pozisyonundaki ‘Mavs’ oyuncularının aldığı puanların toplamı 53 oldu.

Ve benzeri.

Örnek 2: birkaç alana göre gruplandırın ve toplayın (sonra sıralayın)

“Takım” ve pozisyona göre gruplamak ve gruplandırarak “puanların” toplamını bulmak ve ardından sonuçları “puanlara” göre artan sırada sıralamak için aşağıdaki kodu kullanabiliriz:

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

Bu, aşağıdaki sonuçları döndürür:

 { _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 }

Sonuçları azalan düzende noktalara göre sıralamak için -1’i kullanabiliriz:

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

Bu, aşağıdaki sonuçları döndürür:

 { _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 }

Not : $group’un tüm belgelerini burada bulabilirsiniz.

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir