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
- Alan Karşılaştırması için Toplama Çerçevesi
- Alan Karşılaştırması için Mongo Shell’i Kullanma
- Gelişmiş Karşılaştırma Teknikleri
- Performans Hususları
- Sonuç
- SSS
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.