Toplama İşlem Hattı ile Çalışmaya Başlama

Toplama işlem hattı, geliştiricilerin koleksiyonlarında gelişmiş veri analizi ve işleme gerçekleştirmesine olanak tanıyan güçlü bir araçtır. İşlem hattı, hesaplanan bir çıkış oluşturmak için giriş belgelerinde gerçekleştirilen bir dizi veri işleme işlemidir. İşlem hattı aşamaları giriş belgelerini işler ve sonucu bir sonraki aşamaya geçirir. Her aşama, veriler üzerinde filtreleme, gruplandırma, sıralama ve dönüştürme gibi belirli bir işlem gerçekleştirir.

Temel Söz Dizimi

Toplama işlem hattının temel söz dizimi aşağıdaki gibidir:

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

Burada db.collection, toplama işlemini gerçekleştirmek istediğiniz MongoDB koleksiyonudur ve aşama1, aşama2, ..., stageN uygulamak istediğiniz işlem hattı aşamalarıdır.

Örnek Aşamalar

MongoDB için Cosmos DB, işlem hattınızda kullanabileceğiniz çok çeşitli aşamalar sağlar, örneğin:

  • $match: Yalnızca belirtilen koşulla eşleşen belgeleri geçirmek için belgeleri filtreler.
  • $project: Alanları ekleyerek, kaldırarak veya güncelleştirerek belgeleri yeni bir forma dönüştürür.
  • $group: Belgeleri bir veya daha fazla alana göre gruplandırın ve gruplandırılmış veriler üzerinde çeşitli toplama işlevleri gerçekleştirir.
  • $sort: Belgeleri belirtilen alanlara göre sıralar.
  • $skip: Belirtilen sayıda belgeyi atlar.
  • $limit: Sonraki aşamaya geçirilen belge sayısını sınırlar.
  • $unwind: Giriş belgelerinden bir dizi alanını, her öğe için bir belgenin çıkışını almak üzere yok eder.

Kullanılabilir tüm aşamaları görüntülemek için desteklenen özelliklere bakın

Örnekler

Verileriniz üzerinde çeşitli işlemler gerçekleştirmek için toplama işlem hattını nasıl kullanabileceğinize ilişkin bazı örnekler aşağıda verilmiştir:

Filtreleme: "miktar" alanı 20'den büyük olan belgeleri filtrelemek için aşağıdaki işlem hattını kullanabilirsiniz:

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Gruplandırma: Belgeleri "kategori" alanına göre gruplandırmak ve her grubun toplam "miktarını" hesaplamak için aşağıdaki işlem hattını kullanabilirsiniz:

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Sıralama: Belgeleri "price" alanına göre azalan düzende sıralamak için aşağıdaki işlem hattını kullanabilirsiniz:

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Dönüştürme: "Fiyat" değeri 100'den büyük olan belgelere yeni bir "indirim" alanı eklemek için aşağıdaki işlem hattını kullanabilirsiniz:

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Geri sarma: Tüm alt belgeleri 'etiketler' dizi alanından ayırmak ve her değer için yeni bir belge oluşturmak için aşağıdaki işlem hattını kullanabilirsiniz:

db.collection.aggregate([
    { $unwind: "$tags" }
])

Birden çok aşamalı örnek

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

Bu örnekte, "date", "category" ve "sales" alanlarını içeren belgeleri olan "sales" adlı bir örnek koleksiyon kullanıyoruz.

İlk aşama { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } belgeleri "tarih" alanına göre filtreler; yalnızca tarihi 1 Ocak 2021 ile 28 Şubat 2021 arasında olan belgeleri geçirir. "YYYY-AA-GG" biçiminde bir dize tarih biçimi kullanıyoruz.

İkinci aşama { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } } belgeleri "kategori" alanına göre gruplandırıyor ve her grubun toplam satışını hesaplıyor.

Üçüncü aşama { $sort: { totalSales: -1 } } belgeleri azalan düzende "totalSales" alanına göre sıralar.

Dördüncü aşama { $limit: 5 }, sonraki aşamaya geçirilen belge sayısını yalnızca ilk 5 ile sınırlar.

Sonuç olarak işlem hattı, belirtilen tarih aralığı için toplam satışlara göre ilk 5 kategoriyi döndürür.

Sonraki adımlar