MongoDB Grup Toplama

Mongodb Grup Toplama



Toplama, bir MongoDB koleksiyonundan veri çıkarma prosedürüdür. Çok sayıda belgeyi işler ve tahmini sonuçlar sağlar. MongoDB'deki toplama, çeşitli görevleri yerine getiren çeşitli operatörlere ve yöntemlere sahiptir. Bu işleçler arasında, $group işleci belgeleri her benzersiz gruplama için gruplandırır ve tanımlanan bir ifadeye göre düzenler. Grup operatörü, çok çeşitli veri manipülasyonlarını kolaylaştırdığından MongoDB'de önemlidir. MongoDB örneğindeki $group toplaması ve farklı biriktiriciler aşağıda verilmiştir.

MongoDB'de Grup Toplama Nasıl Çalışır?

Girdi belgelerini belirtilen _id ifadesine göre gruplandırmak için $group operatörü kullanılmalıdır. Daha sonra, her ayrı grup için toplam değerleri içeren tek bir belge döndürmelidir. Uygulamaya başlamak için MongoDB'de “Kitaplar” koleksiyonunu oluşturduk. 'Kitaplar' koleksiyonunu oluşturduktan sonra, farklı alanlarla ilişkili belgeleri ekledik. Yürütülecek sorgu aşağıda gösterildiği gibi, belgeler koleksiyona insertMany() yöntemiyle eklenir.

>db.Books.insertMany([

{
_id:1,
başlık: 'Anna Karenina',
fiyat: 290,
yıl: 1879,
order_status: 'Stokta var',
yazar: {
'name':'Leo Tolstoy'
}
},
{
_id:2,
başlık: 'Bülbülü Öldürmek İçin',
fiyat: 500,
yıl: 1960,
order_status: 'stokta yok',
yazar: {
'name':'Harper Lee'
}
},
{
_id:3,
başlık: 'Görünmez Adam',
fiyat: 312,
yıl: 1953,
order_status: 'Stokta',
yazar: {
'name':'Ralph Ellison'
}
},
{
id:4,
başlık: 'Sevgili',
fiyat: 370,
yıl: 1873,
order_status: 'stokta yok',
yazar: {
'name':'Toni Morrison'
}
},
{
id:5,
başlık: 'Her Şey Dağılıyor',
fiyat: 200,
yıl: 1958,
order_status: 'Stokta',
yazar: {
'name':'Chinua Achebe'
}
},
{
id:6,
başlık: 'Mor Renk',
fiyat: 510,
yıl: 1982,
order_status: 'stokta yok',
yazar: {
'name':'Alice Walker'
}
}
])

Çıktı 'true' olarak kabul edildiğinden, belgeler herhangi bir hatayla karşılaşmadan 'Kitaplar' koleksiyonunda başarılı bir şekilde saklanır. Şimdi, “Kitaplar” koleksiyonundaki bu belgeleri “$group” toplamasını gerçekleştirmek için kullanacağız.









Örnek 1: $group Toplama Kullanımı



$group toplamasının basit kullanımı burada gösterilmektedir. Toplu sorgu, önce '$group' operatörünü, ardından '$group' operatörünü, gruplandırılmış belgeleri oluşturmak için ifadeleri daha sonra alır.





>db.Books.aggregate([

{ $grup:{ _id:'$yazar.adı'} }

])

$group operatörünün yukarıdaki sorgusu, tüm giriş belgeleri için toplam değerleri hesaplamak için '_id' alanıyla belirtilir. Daha sonra “_id” alanı, “_id” alanında farklı bir grup oluşturan “$yazar.adı” ile tahsis edilir. Herhangi bir birikmiş değer hesaplamadığımız için $yazar.adı öğesinin ayrı değerleri döndürülecektir. $group toplama sorgusunun yürütülmesi aşağıdaki çıktıya sahiptir. _id alanı, yazar.adlarının değerlerine sahiptir.



Örnek 2: $push Accumulator ile $group Toplama Kullanımı

$group toplama örneği, yukarıda belirtilen herhangi bir akümülatörü kullanır. Ancak biriktiricileri $group toplamasında kullanabiliriz. Akümülatör operatörleri, “_id” altında “gruplanmış” olanlar dışındaki girdi belgesi alanlarında kullanılanlardır. İfadenin alanlarını bir diziye itmek istediğimizi varsayalım, ardından “$group” operatöründe “$push” toplayıcı çağrılır. Örnek, “$group”un “$push” toplayıcısını daha net anlamanıza yardımcı olacaktır.

>db.Books.aggregate(

[

{ $group : { _id : '$_id', yıl: { $push: '$year' } } }

]

).güzel();

Burada dizideki verilen kitapların basım yılını gruplandırmak istiyoruz. Bunu gerçekleştirmek için yukarıdaki sorgu uygulanmalıdır. Toplama sorgusu, $push akümülatörünü kullanarak grup yılını almak için '$group' operatörünün '_id' alan ifadesini ve 'year' alan ifadesini aldığı ifadeyle sağlanır. Bu özel sorgudan alınan çıktı, yıl alanları dizisini oluşturur ve döndürülen gruplanmış belgeyi bunun içinde depolar.

Örnek 3: “$min” Toplayıcı ile $group Toplama Kullanımı

Ardından, koleksiyondaki her belgeden minimum eşleşen değeri elde etmek için $group toplamasında kullanılan '$min' toplayıcımız var. $min biriktirici için sorgu ifadesi aşağıda verilmiştir.

>db.Books.aggregate([

{
$ grubu:{
_İD:{
başlık: '$başlık',
order_status: '$order_status'
},
minPrice:{$min: '$price'}
}
}
])

Sorgu, belgeyi 'başlık' ve 'sipariş_durumu' alanları için gruplandırdığımız '$group' toplama ifadesine sahiptir. Daha sonra gruplanmayan alanlardan minimum fiyat değerlerini alarak belgeleri gruplandıran $min akümülatörünü sağladık. Aşağıdaki $min biriktirici sorgusunu çalıştırdığımızda, gruplandırılmış belgeleri başlığa ve sıra_durumuna göre sırayla döndürür. Minimum fiyat ilk önce görünür ve belgenin en yüksek fiyatı en sonda yer alır.

Örnek 4: $group Toplamasını $sum Accumulator ile kullanın

$group işlecini kullanarak tüm sayısal alanların toplamını elde etmek için $sum biriktirme işlemi konuşlandırılır. Koleksiyonlardaki sayısal olmayan değerler bu toplayıcı tarafından dikkate alınır. Ek olarak, burada $group agregasyonu ile $match agregasyonunu kullanıyoruz. $match toplama, bir belgede verilen sorgu koşullarını kabul eder ve eşleşen belgeyi, daha sonra her grup için belgenin toplamını döndüren $group toplamaya iletir. $sum biriktirici için sorgu aşağıda sunulmuştur.

>db.Books.aggregate([

{ $match:{ order_status:'Stokta'}},

{ $grup:{ _id:'$yazar.adı', toplamKitaplar: { $sum:1 } }

}])

Yukarıdaki toplama sorgusu, durumu 'In-Stock' olan ve $group'a girdi olarak iletilen tüm 'order_status' ile eşleşen $match operatörüyle başlar. Ardından, $group operatörü, stoktaki tüm kitapların toplamını veren $sum biriktirici ifadesine sahiptir. “$sum:1” aynı gruba ait her belgeye 1 eklediğine dikkat edin. Buradaki çıktı, 'Stokta' ile ilişkili 'sipariş_durumu'na sahip yalnızca iki gruplandırılmış belge gösterdi.

Örnek 5: $group Aggregation'ı $sort Aggregation ile kullanın

Buradaki $group operatörü, gruplandırılmış belgeleri sıralamak için kullanılan “$sort” operatörü ile birlikte kullanılır. Aşağıdaki sorgunun sıralama işlemi için üç adımı vardır. Birincisi $match aşaması, ardından $group aşaması ve son olarak gruplanmış belgeyi sıralayan $sort aşamasıdır.

>db.Books.aggregate([

{ $match:{ order_status:'out-of-stock'}},

{ $group:{ _id:{ yazarAdı :'$yazar.adı'}, toplamKitaplar: { $sum:1} } },

{ $sıralama:{yazarAdı:1}}

])

Burada, 'order_status' stokta olmayan eşleşen belgeyi getirdik. Ardından, eşleşen belge, belgeyi “yazarAdı” ve “totalBooks” alanıyla gruplandıran $group aşamasında girilir. $group ifadesi, 'stokta olmayan' kitapların toplam sayısı için $sum biriktiriciyle ilişkilendirilir. Gruplanan belgeler daha sonra $sort ifadesi ile artan düzende sıralanır, burada '1' artan düzeni gösterir. Aşağıdaki çıktıda belirtilen sırada sıralanan grup belgesi elde edilir.

Örnek 6: Belirgin Değer için $group Toplamasını Kullanın

Toplama prosedürü ayrıca belgeleri, farklı öğe değerlerini çıkarmak için $group operatörünü kullanarak öğeye göre gruplandırır. Bu ifadenin sorgu ifadesini MongoDB'ye alalım.

>db.Books.aggregate( [ { $group : { _id : '$title' } } ] ).pretty();

Toplama sorgusu, grup belgesinin farklı değerini elde etmek için Kitaplar koleksiyonuna uygulanır. Buradaki $ grubu, kendisine 'başlık' alanını girdiğimiz için farklı değerleri veren _id ifadesini alır. Grup belgesinin çıktısı, _id alanına karşı başlık adları grubunu içeren bu sorgu çalıştırıldığında elde edilir.

Çözüm

Kılavuz, belgeyi MongoDB veritabanında gruplandırmak için $group toplama operatörü kavramını temizlemeyi amaçladı. MongoDB toplama yaklaşımı, gruplandırma fenomenini geliştirir. $group operatörünün sözdizimi yapısı örnek programlarla gösterilmiştir. $group operatörlerinin temel örneğine ek olarak, bu operatörü $push, $min, $sum gibi bazı toplayıcılarla ve $match ve $sort gibi operatörlerle de kullandık.