📊 MongoDB Sorgulama Rehberi: Koleksiyonlardan Veri Çekme Yöntemleri
🚀 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde MongoDB koleksiyonlarındaki verileri nasıl sorgulayacağınızı öğreneceksiniz.
find() metodu ile temel sorgulama, karşılaştırma operatörleri ($gt, $in), çoklu koşul filtreleme, dizi (array) ve gömülü belge sorgulama teknikleri anlatılmaktadır.
Ayrıca performansı artırmak için belirli alanları (projection) nasıl seçeceğinizi de göreceksiniz.
🧠 Teknik Özet
Konu: MongoDB find() metodu ve farklı filtreleme koşullarıyla veri çekme yöntemleri
Amaç: Büyük koleksiyonlarda yalnızca istenen verileri doğru şekilde çekmek
Adımlar:
- MongoDB kabuğuna bağlanma
- Örnek veri koleksiyonu oluşturma
- Tekil alan sorguları ($eq, $gt, $in, $ne)
- Çoklu koşul sorguları ($and, $or)
- Dizi (array) sorgulama ($all)
- Gömülü belgelerde alan erişimi (dot notation)
- Alan sınırlama (projection)
⚙️ 1. Örnek Veri Kümesini Hazırlama
MongoDB kabuğuna yönetici kullanıcıyla bağlanın:
mongo -u rabisu_yonetici -p --authenticationDatabase admin
➡️ MongoDB’ye kimlik doğrulamalı bağlantı kurar.
Ardından zirveler adlı koleksiyonu oluşturup örnek belgeleri ekleyin:
db.zirveler.insertMany([
{ "isim": "Everest", "yukseklik": 8848, "lokasyon": ["Nepal", "Çin"], "tirmanislar": { "ilk": { "yil": 1953 }, "toplam": 5656 } },
{ "isim": "K2", "yukseklik": 8611, "lokasyon": ["Pakistan", "Çin"], "tirmanislar": { "ilk": { "yil": 1954 }, "toplam": 306 } },
{ "isim": "Kançencunga", "yukseklik": 8586, "lokasyon": ["Nepal", "Hindistan"], "tirmanislar": { "ilk": { "yil": 1955 }, "toplam": 283 } },
{ "isim": "Lhotse", "yukseklik": 8516, "lokasyon": ["Nepal", "Çin"], "tirmanislar": { "ilk": { "yil": 1956 }, "toplam": 461 } },
{ "isim": "Makalu", "yukseklik": 8485, "lokasyon": ["Çin", "Nepal"], "tirmanislar": { "ilk": { "yil": 1955 }, "toplam": 361 } }
])
➡️ Beş dağ zirvesini içeren örnek veri koleksiyonunu oluşturur.
🔍 2. Tekil Alanları Sorgulama
🟢 Eşitlik (Equality)
db.zirveler.find({ "isim": "Everest" })
➡️ isim alanı “Everest” olan belgeyi döndürür.
🟠 Eşit Değil ($ne)
db.zirveler.find({ "isim": { $ne: "Everest" } })
➡️ Everest dışındaki tüm zirveleri listeler.
🔵 Dahil ($in)
db.zirveler.find({ "isim": { $in: ["Everest", "K2"] } })
➡️ İsmi “Everest” veya “K2” olan belgeleri döndürür.
🔺 Büyüktür ($gt)
db.zirveler.find({ "yukseklik": { $gt: 8500 } })
➡️ Yüksekliği 8500 metreden fazla olan zirveleri getirir.
⚡ 3. Çoklu Koşullar ile Filtreleme
AND (örtük)
db.zirveler.find({ "isim": "Everest", "yukseklik": 8848 })
➡️ İki koşulu da sağlayan belgeleri döndürür.
OR (açık)
db.zirveler.find({ $or: [{ "isim": "Everest" }, { "isim": "K2" }] })
➡️ Everest veya K2 isimli belgeleri döndürür.
🧩 4. Dizi (Array) Alanlarını Sorgulama
Tek değerli sorgu:
db.zirveler.find({ "lokasyon": "Nepal" })
➡️ lokasyon dizisinde “Nepal” geçen belgeleri döndürür.
Çok değerli sorgu ($all):
db.zirveler.find({ "lokasyon": { $all: ["Çin", "Nepal"] } })
➡️ Hem Çin hem Nepal geçen belgeleri getirir.
🧱 5. Gömülü (Nested) Belgeleri Sorgulama
Tek katmanlı erişim:
db.zirveler.find({ "tirmanislar.toplam": { $gt: 1000 } })
➡️ Toplam tırmanış sayısı 1000’den büyük belgeleri getirir.
Çok katmanlı erişim:
db.zirveler.find({ "tirmanislar.ilk.yil": { $lt: 1960 } })
➡️ İlk tırmanışı 1960’tan önce olan zirveleri getirir.
🧾 6. Alanların Alt Kümesini Döndürme (Projeksiyon)
Belirli alanları dahil etme:
db.zirveler.find({}, { "isim": 1 })
➡️ Sadece isim ve _id alanlarını döndürür.
Belirli alanları hariç tutma:
db.zirveler.find({}, { "tirmanislar": 0, "lokasyon": 0 })
➡️ Belirtilen alanlar dışındaki tüm alanları döndürür.
Kural: Projeksiyon belgesinde aynı anda hem 1 (dahil et) hem 0 (hariç tut) kullanılamaz. Sadece _id alanı hariç tutulabilir.
💬 Sıkça Sorulan Sorular (SSS)
- Tüm koleksiyonu sorgulamak performansı etkiler mi?
Evet, özellikle büyük verilerde db.koleksiyon.find() kullanmak sistemi yavaşlatabilir. Filtreleme şarttır.
- find() ve findOne() farkı nedir?
find() bir cursor döndürür; findOne() yalnızca tek belge döndürür.
- Dizide belirli sırayı kontrol edebilir miyim?
Evet. lokasyon.0: "Nepal" yazarak ilk elemanı “Nepal” olan belgeleri seçebilirsiniz.
- Cursor nedir?
find() metodunun döndürdüğü sonuç kümesidir. limit() ve sort() gibi metotlarla yönetilebilir.
- _id alanı neden hep geliyor?
MongoDB, her belgeye _id anahtarını otomatik ekler; istenirse _id: 0 ile gizlenebilir.
🧭 Sonuç
Bu rehberde MongoDB’nin find() metodunu ve operatörlerini ($gt, $in, $and, $or, $all) kullanarak belgeleri filtrelemeyi, gömülü alanları sorgulamayı ve alan sınırlaması yapmayı öğrendiniz.
Uygulamanızın veri erişimini optimize etmek ve performansı artırmak için Rabisu Bulut Sanal Sunucuları üzerinde MongoDB altyapınızı hemen deneyebilirsiniz