Ana içeriğe geç

📊 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:

  1. MongoDB kabuğuna bağlanma
  2. Örnek veri koleksiyonu oluşturma
  3. Tekil alan sorguları ($eq, $gt, $in, $ne)
  4. Çoklu koşul sorguları ($and, $or)
  5. Dizi (array) sorgulama ($all)
  6. Gömülü belgelerde alan erişimi (dot notation)
  7. 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)​

  1. Tüm koleksiyonu sorgulamak performansı etkiler mi?

Evet, özellikle büyük verilerde db.koleksiyon.find() kullanmak sistemi yavaşlatabilir. Filtreleme şarttır.

  1. find() ve findOne() farkı nedir?

find() bir cursor döndürür; findOne() yalnızca tek belge döndürür.

  1. Dizide belirli sırayı kontrol edebilir miyim?

Evet. lokasyon.0: "Nepal" yazarak ilk elemanı “Nepal” olan belgeleri seçebilirsiniz.

  1. Cursor nedir?

find() metodunun döndürdüğü sonuç kümesidir. limit() ve sort() gibi metotlarla yönetilebilir.

  1. _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