MongoDB Tutorials

MongoDB’de Alan Karşılaştırmalarında Ustalaşma

Spread the love

MongoDB, NoSQL bir belge veritabanı olarak, belgeler içindeki veya birden fazla belge genelindeki alanları karşılaştırmak için çok yönlü yöntemler sunar. Bu kılavuz, farklı beceri seviyelerine ve kullanım durumlarına hitap eden bu teknikleri ele almaktadır.

İçindekiler

MongoDB Sorgu Dilini Kullanma

En basit yaklaşım, uygulama kodunuz içinde MongoDB’nin sorgu dilini içerir. Bu, alan karşılaştırmalarına göre belgeleri doğrudan filtreler.

Bir products koleksiyonu düşünün:


[
  { "_id" : ObjectId("..."), "price" : 10, "discount" : 5 },
  { "_id" : ObjectId("..."), "price" : 20, "discount" : 2 },
  { "_id" : ObjectId("..."), "price" : 30, "discount" : 0 }
]

price > discount olan ürünleri bulmak için, sorgu operatörü içinde doğrudan bir karşılaştırma işe yaramaz. Bunun yerine, $expr operatörünü kullanın:


db.products.find( { $expr: { $gt: [ "$price", "$discount" ] } } )

$expr, sorgu aşamasında toplama boru hattı ifadelerinin değerlendirilmesini sağlar; belge içi alan karşılaştırmaları için çok önemlidir.

Alan Karşılaştırması için Toplama Çerçevesi

Toplama Çerçevesi, özellikle karmaşık karşılaştırmalar veya hesaplamalar için güçlü ve esnek bir yöntem sunar. Filtrelemeden önce gelişmiş mantık ve dönüşümler sağlar.

Ürünleri bulmak ve indirimden sonra nihai fiyatı hesaplamak için:


db.products.aggregate([
  {
    $project: {
      _id: 1,
      price: 1,
      discount: 1,
      finalPrice: { $subtract: [ "$price", "$discount" ] }
    }
  },
  {
    $match: {
      finalPrice: { $gt: 15 }
    }
  }
])

Bu boru hattı finalPrice‘ı yansıtır ve daha sonra buna göre filtreler.

Alan Karşılaştırması için Mongo Shell’i Kullanma

Mongo shell, sorguları ve toplamaları test etmek için etkileşimli bir ortam sağlar. Yukarıdaki yöntemler doğrudan shell içinde çalışır.


> db.products.find( { $expr: { $gt: [ "$price", "$discount" ] } } )

Gelişmiş Karşılaştırma Teknikleri

Belgeler arasında alanları karşılaştırmak, karşılaştırmadan önce belgeleri birleştirmek için $lookup veya $group ile toplamayı gerektirir. Farklı veri türlerini işleme, uyumluluğu sağlamayı gerektirir; açık veri türü dönüştürme gerekebilir.

Performans Hususları

$expr ek yük eklerken, genellikle gereklidir. Büyük veri kümeleri için sorgu optimizasyonu çok önemlidir. İlgili alanları indekslemek performansı önemli ölçüde iyileştirir.

Sonuç

MongoDB, alan karşılaştırması için çeşitli yöntemler sunar. $expr ile sorgu dili, basit belge içi karşılaştırmalar için uygundur; toplama çerçevesi ise karmaşık senaryolar ve hesaplamalar konusunda mükemmeldir. Mongo shell, test ve deneyi kolaylaştırır.

SSS

  • Farklı belgelerdeki alanları karşılaştırabilir miyim? $lookup veya $group ile toplamayı kullanın.
  • Farklı veri türlerindeki alanları karşılaştırmam gerekirse ne olur? Veri türü uyumluluğunu sağlayın; açık veri türü dönüştürme gerekebilir.
  • $expr kullanmanın performans etkileri var mı? Evet, ancak genellikle gerekli esnekliği sağlar. Büyük veri kümeleri için sorguları optimize edin.

Bir yanıt yazın

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