MongoDB Academy · Ders

İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler

Öğrenenler, verilerin işlem hattı aşamalarından nasıl aktığını anlayacak ve aşama işleçleriyle ifade işleçlerini birbirinden ayıracaklardır.

1. ders / 413 adım

İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.

Toplama İşlem Hattı Nedir?

Toplama işlem hattı, MongoDB'nin sunucu tarafı veri dönüştürme motorudur. Ham belgeleri alıp uygulama kodunda işlemek yerine, veri akışını adım adım dönüştüren bir dizi aşama tanımlarsınız: filtreleme, yeniden şekillendirme, gruplama, hesaplama ve sıralama işlemlerinin tümü veritabanı motorunda gerçekleşir. Böylece yoğun hesaplamalar veriye yakın tutulur ve ağ üzerinden gönderdiğiniz veri miktarı büyük ölçüde azalır.

// A simple aggregation pipeline
db.orders.aggregate([
  { $match: { status: 'completed' } },   // stage 1: filter
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },  // stage 2: group
  { $sort: { total: -1 } },             // stage 3: sort
  { $limit: 10 }                        // stage 4: take top 10
]);

Belgelerin Aşamalardan Akışı

İşlem hattını bir taşıma bandı gibi düşünün: her belge 1. aşamaya girer, dönüştürülür (veya filtrelenerek çıkarılır) ve sonuçlar 2. aşamaya, ardından 3. aşamaya ve bu şekilde devam eder. Her aşamada belge kümesi küçülebilir (filtreleme), genişleyebilir (unwind) veya hesaplanmış özetlerle tamamen değiştirilebilir (group). Bir filtre koşulunu karşılamayan belgeler işlem hattından çıkarılır ve sonraki aşamalara hiçbir zaman ulaşmaz.

// Data flow visualization:
// Input: 10,000 orders
// Stage 1 ($match: status='completed'):  8,000 docs
// Stage 2 ($group by userId):            1,200 docs (one per user)
// Stage 3 ($sort by total DESC):         1,200 docs (reordered)
// Stage 4 ($limit 10):                      10 docs
// Output to client: 10 docs

Aşama Operatörleri ve İfade Operatörleri

Toplama çatısı iki tür operatörü birbirinden ayırır: bir işlem hattı aşamasının ne yaptığını tanımlayan aşama operatörleri ($ ile başlayan; $match, $group, $project gibi) ve bir aşamanın içinde değerleri hesaplayan ifade operatörleri (bunlar da $ ile başlar; $sum, $avg, $concat gibi). Aşamalar yapı taşlarıdır; ifadeler ise bunların içindeki hesaplamalardır.

db.sales.aggregate([
  // $group is a STAGE operator
  { $group: {
    _id: '$region',
    // $sum and $avg are EXPRESSION operators (accumulators here)
    totalRevenue: { $sum: '$amount' },
    avgOrder: { $avg: '$amount' },
    // $concat is an expression operator
    label: { $concat: ['Region: ', '$region'] }
  }}
]);

$ İşaretiyle Alan Başvuruları

Toplama ifadelerinde $ ile başlayan bir dize alan başvurusudur; geçerli belgedeki o alanın değerine başvurur. Ön eki olmayan bir dize, sabit değer olarak değerlendirilir. Bu ayrım çok önemlidir: '$price', “price alanının değeri” anlamına gelirken 'price', sabit “price” dizesi anlamına gelir.

db.products.aggregate([
  { $project: {
    name: 1,
    // '$price' references the 'price' field value
    discountedPrice: { $multiply: ['$price', 0.9] },
    // 'price' without $ is a literal string
    label: 'price',  // all docs get the string 'price', not the field value
    // $$ROOT is a special variable for the whole document
    original: '$$ROOT'
  }}
]);

Sistem Değişkenleri: $$ROOT, $$NOW, $$CURRENT

Toplama işlem hattı, özel değerlere erişim sağlayan ve $$ ile başlayan sistem değişkenleri sunar: $$ROOT geçerli belgenin tamamını, $$NOW geçerli tarih ve saati (hesaplanmış alanlar için $project içinde kullanışlıdır), $$CURRENT geçerli belgenin alan yolu bağlamını ifade eder; $$REMOVE ise değer olarak atandığında bir alanı koşullu olarak kaldırır.

db.orders.aggregate([
  { $project: {
    _id: 1,
    orderDate: 1,
    daysOld: {
      $divide: [
        { $subtract: ['$$NOW', '$orderDate'] },  // $$NOW = current time
        1000 * 60 * 60 * 24  // convert ms to days
      ]
    },
    // Conditionally remove a field:
    sensitiveField: { $cond: { if: '$isAdmin', then: '$secret', else: '$$REMOVE' } }
  }}
]);

Yaygın İşlem Hattı Aşamalarına Genel Bakış

MongoDB onlarca işlem hattı aşaması sunar. Bilinmesi gereken en temel aşamalar şunlardır: $match (belgeleri filtreler), $project (alanları yeniden şekillendirir veya hesaplar), $group (anahtara göre toplar), $sort (sonuçları sıralar), $limit ve $skip (sayfalandırma), $lookup (başka bir koleksiyonla birleştirir) ve $unwind (dizileri düzleştirir). Bunlarda uzmanlaştığınızda neredeyse her analitik sorguyu ifade edebilirsiniz.

// Quick reference of the most-used stages:
// $match   - { $match: { field: condition } }
// $project - { $project: { keep: 1, drop: 0, computed: expr } }
// $group   - { $group: { _id: '$field', agg: { $sum: '$val' } } }
// $sort    - { $sort: { field: 1 or -1 } }
// $limit   - { $limit: N }
// $skip    - { $skip: N }
// $lookup  - { $lookup: { from, localField, foreignField, as } }
// $unwind  - { $unwind: '$arrayField' }

İşlem Hattı Optimizasyonu: Aşama Sırası Önemlidir

MongoDB'nin sorgu iyileştiricisi, verimlilik için bazı işlem hattı aşamalarının sırasını otomatik olarak değiştirir; örneğin mümkün olduğunda $match aşamasını $sort ve $group aşamalarının önüne taşır. Ancak $match aşamasını her zaman mümkün olduğunca erken yerleştirmelisiniz: erken filtreleme, sonraki aşamaların işlemesi gereken belge sayısını azaltır ve $match ilk aşamaysa MongoDB bunun için bir dizin kullanabilir.

// BAD: expensive group before filter
db.orders.aggregate([
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },
  { $match: { total: { $gt: 1000 } } }  // too late to use index
]);

// GOOD: filter first, then group
db.orders.aggregate([
  { $match: { status: 'completed', createdAt: { $gte: thisYear } } },
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },
  { $match: { total: { $gt: 1000 } } }
]);

Aritmetik İfade Operatörleri

Aritmetik ifadeler, bir aşama içinde mevcut alanlardan yeni değerler hesaplamanızı sağlar. En yaygın kullanılanlar şunlardır: $add, $subtract, $multiply, $divide, $mod ve $abs. Bu işleçler alan başvuruları, sabit değerler veya diğer ifadelerin sonuçları üzerinde çalışır; böylece daha önce uygulama tarafında işlenmesi gereken karmaşık hesaplamaları gerçekleştirmenizi sağlar.

db.invoices.aggregate([
  { $project: {
    subtotal: '$subtotal',
    taxAmount: { $multiply: ['$subtotal', 0.08] },  // 8% tax
    total: { $add: ['$subtotal', { $multiply: ['$subtotal', 0.08] }] },
    discount: { $subtract: ['$listPrice', '$salePrice'] },
    margin: { $divide: [{ $subtract: ['$price', '$cost'] }, '$price'] }
  }}
]);

Koşullu İfadeler: $cond ve $ifNull

Koşullu ifadeler, toplama aşamalarının içinde if/else mantığı kullanmanızı sağlar. $cond bir boolean ifadeyi değerlendirir ve iki değerden birini döndürür (üçlü işleç gibi). $ifNull ise bir alan null olduğunda veya mevcut olmadığında yedek bir değer döndürür. Bunlar, isteğe bağlı alanları işlemek ve depolanan verileri değiştirmeden türetilmiş kategoriler hesaplamak için gereklidir.

db.products.aggregate([
  { $project: {
    name: 1,
    price: 1,
    // Ternary: label products as budget or premium
    tier: {
      $cond: {
        if: { $lt: ['$price', 100] },
        then: 'budget',
        else: 'premium'
      }
    },
    // Fallback for missing description
    description: { $ifNull: ['$description', 'No description available'] }
  }}
]);

Dize İfade İşleçleri

Dize işleçleri, pipeline içindeki metin alanlarını değiştirmenizi sağlar: $concat dizeleri birleştirir, $toUpper/$toLower büyük-küçük harf biçimini değiştirir, $trim/$ltrim/$rtrim boşlukları kaldırır, $substr bir alt dize çıkarır ve $split bir ayırıcıya göre böler. Bunlar, depolanan belgeleri güncellemeniz gerekmeden toplama sırasında verileri standartlaştırmak için kullanışlıdır.

db.users.aggregate([
  { $project: {
    // Combine first and last name
    fullName: { $concat: ['$firstName', ' ', '$lastName'] },
    // Normalise email to lowercase
    emailNorm: { $toLower: '$email' },
    // Extract domain from email
    domain: {
      $arrayElemAt: [{ $split: ['$email', '@'] }, 1]
    }
  }}
]);

Tarih İfade İşleçleri

Tarih işleçleri, gruplama ve hesaplama amacıyla tarih alanlarından bileşenler çıkarır: $year, $month, $dayOfMonth, $hour, $minute, $dayOfWeek ve $dateToString. Bunlar, "aylık toplam sipariş" veya "haftanın gününe göre ortalama gelir" gibi zaman serisi analizleri için vazgeçilmezdir.

// Group orders by year and month
db.orders.aggregate([
  { $group: {
    _id: {
      year: { $year: '$createdAt' },
      month: { $month: '$createdAt' }
    },
    count: { $sum: 1 },
    revenue: { $sum: '$amount' }
  }},
  { $sort: { '_id.year': 1, '_id.month': 1 } }
]);

Hızlı Kontrol

Bu dersteki aggregation pipeline kavramlarını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: pipeline aşamaları bir belge akışını sırayla dönüştürür, aşama işleçleri bir aşamanın ne yaptığını tanımlarken ifade işleçleri aşamaların içindeki değerleri hesaplar ve $ alan başvurularının, $$ ise sistem değişkenlerinin önüne gelir. Sırada, filtreleme ve yeniden şekillendirme işlemlerinin temel araçları olan $match ve $project var.

Başlamak ücretsiz

Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler” dersi ücretsiz mi?

Evet — “İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.

“İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler” dersinde ne öğreneceğim?

Öğrenenler, verilerin işlem hattı aşamalarından nasıl aktığını anlayacak ve aşama işleçleriyle ifade işleçlerini birbirinden ayıracaklardır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlem Hattı Kavramları: Aşamalar, İşleçler ve İfadeler
  2. $match ve $project: Filtreleme ve Yeniden Şekillendirme
  3. $group: Toplama ve Toplamları Hesaplama
  4. İşlem Hattında $sort, $limit ve $skip
← MongoDB Academy Sayfasına Dön