MongoDB

MongoDB Sol Tara Birleştirmeleri: Kapsamlı Bir Kılavuz

Spread the love

İçerik Tablosu

Sol Birleştirmeleri ve MongoDB Yaklaşımı Anlamak

SQL veritabanlarında, sol birleştirme, sol tablodaki tüm satırların sonuç kümesine dahil edilmesini sağlar. Sağ tabloda eşleşen bir satır varsa, karşılık gelen veriler birleştirilir; aksi takdirde, sağ taraftaki alanlar NULL değerleriyle doldurulur. NoSQL bir veritabanı olan MongoDB’nin doğrudan bir “SOL BİRLEŞTİRME” komutu yoktur. Bununla birlikte, toplama çerçevesi içindeki güçlü $lookup operatörünü kullanarak aynı işlevi sağlayabiliriz.

$lookup Operatöründe Ustalaşmak

$lookup operatörü, belirtilen alanlara göre iki koleksiyondaki belgeleri birleştirir. “Sol” koleksiyondaki tüm belgeleri, “sağ” koleksiyonda eşleşme bulunup bulunmadığına bakılmaksızın döndürdüğünü anlamak çok önemlidir. Sözdizimini inceleyelim:


db.collection1.aggregate([
  {
    $lookup: {
      from: "collection2",       // Sağ koleksiyon
      localField: "field1",     // Eşleşme için collection1'deki alan
      foreignField: "field2",    // Eşleşme için collection2'deki alan
      as: "results"              // Eşleşen belgeleri tutacak dizi alanı
    }
  }
])

İki koleksiyon düşünelim: customers ve orders.

customers koleksiyonu:

_id name city
1 John Doe New York
2 Jane Smith London
3 Peter Jones Paris

orders koleksiyonu:

_id customer_id amount
1 1 100
2 1 200
3 2 50

Sol birleştirme gerçekleştirmek için $lookup kullanıyoruz:


db.customers.aggregate([
  {
    $lookup: {
      from: "orders",
      localField: "_id",
      foreignField: "customer_id",
      as: "orders"
    }
  }
])

Bu, tüm müşterileri döndürür. Siparişi olanların dolu bir orders dizisi olacaktır; olmayanların ise boş bir dizisi olacaktır.

Sonuçları Filtreleme

$match aşaması, birleştirme sonrası filtreleme sağlar. Örneğin, 100$’ı aşan siparişleri olan müşterileri bulmak için:


db.customers.aggregate([
  {
    $lookup: { /* ... (yukarıdakiyle aynı $lookup) ... */ }
  },
  {
    $match: {
      "orders.amount": { $gt: 100 }
    }
  }
])

Gelişmiş Toplama Teknikleri

Toplama boru hattının esnekliği $lookup ve $match‘ın ötesine uzanır. $unwind (dizileri ayırmak için), $group (verileri toplamak için) ve $sort (sonuçları sıralamak için) gibi aşamalar, karmaşık veri dönüşümleri için kullanılabilir. Örneğin, her müşterinin toplam harcamasını hesaplamak için:


db.customers.aggregate([
  {
    $lookup: { /* ... (yukarıdakiyle aynı $lookup) ... */ }
  },
  { $unwind: "$orders" },
  {
    $group: {
      _id: "$_id",
      name: { $first: "$name" },
      totalSpent: { $sum: "$orders.amount" }
    }
  }
])

Performansı Optimize Etme

Büyük veri kümeleri için performans çok önemlidir. localField ve foreignField‘da kullanılan alanların indekslenmesi çok önemlidir. Verimli indeksleme, birleştirme işlemini önemli ölçüde hızlandırır. Gereksiz aşamaları ortadan kaldırmak ve sorgu verimliliğini optimize etmek için toplama boru hattınızı analiz edin.

Sıkça Sorulan Sorular

S: field1 veya field2‘nin birden fazla eşleşmesi varsa ne olur? C: $lookup, results dizisinde tüm eşleşen belgeleri döndürecektir. Her birini ayrı ayrı işlemek için $unwind kullanın.

S: SAĞ BİRLEŞTİRME yapabilir miyim? C: Doğrudan değil. $lookup‘ta koleksiyonları ters çevirin ve eşleşmeyen belgeleri buna göre işleyin.

S: Çok büyük koleksiyonlarla performans nasıl yönetilir? C: İndeksleme çok önemlidir. İşlemeyi en aza indirmek için boru hattınızı optimize edin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir