Skip to main content

📊 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