Resim

PyMongo ile Gelişmiş MongoDB Sorguları

PyMongo ile Gelişmiş MongoDB Sorguları

Basit alan eşleştirmelerinin ötesine geçerek, PyMongo'da güçlü ve karmaşık sorgular oluşturmayı öğrenelim. Bu sorgular, Python sözlükleri içinde özel sorgu operatörleri kullanılarak tanımlanır.

Sorgu operatörleri daima $ işaretiyle başlar.

1. Karşılaştırma Operatörleri

Bu operatörler, sayısal veya tarih tabanlı alanlarda büyüklük/küçüklük kontrolü yapmak için kullanılır.

Operatör

Anlamı

SQL Karşılığı

$gt

Greater Than (Büyüktür)

>

$lt

Less Than (Küçüktür)

<

$gte

Greater Than or Equal (Büyük Eşittir)

>=

$lte

Less Than or Equal (Küçük Eşittir)

<=

$ne

Not Equal (Eşit Değil)

!=

Örnek: Yılı 2023'ten Küçük Olan Kitapları Bulma

# Yıl alanı 2023'ten küçük ($lt) olan belgeleri bul
sorgu = {"yil": {"$lt": 2023}}
print("--- Yılı 2023'ten Küçük Olanlar ($lt) ---")
for kitap in kitaplar_col.find(sorgu):
    print(f"Kitap: {kitap['isim']}, Yıl: {kitap['yil']}")

2. Mantıksal Operatörler

Birden fazla sorgu kriterini birleştirmek için kullanılırlar.

Operatör

Anlamı

Açıklama

$and

VE

Tüm koşulların doğru olması gerekir.

$or

VEYA

Koşullardan en az birinin doğru olması gerekir.

$not

DEĞİL

Koşulun doğru olmaması gerekir.

Örnek: $or Operatörü ile Sorgulama

Yazarı 'Ahmet Bilgin' VEYA Yılı 2022 olan tüm kitapları bulalım:

# '$or' operatörü, sorgu kriterlerinin bir listesini bekler
or_sorgusu = {
    "$or": [
        {"yazar": "Ahmet Bilgin"},
        {"yil": 2022}
    ]
}
print("\n--- Yazar X VEYA Yıl Y Olanlar ($or) ---")
for kitap in kitaplar_col.find(or_sorgusu):
    print(f"Kitap: {kitap['isim']}, Yazar: {kitap['yazar']}, Yıl: {kitap['yil']}")

Örnek: $and Operatörü ile Sorgulama (Gizli Kullanım)

Aslında, sorgu sözlüğüne art arda yazılan her yeni filtre otomatik olarak bir $and operatörü gibi davranır:

# Yazar 'Ahmet Bilgin' VE Yıl 2024 olsun
and_sorgusu = {"yazar": "Ahmet Bilgin", "yil": 2024}

print("\n--- Yazar X VE Yıl Y Olanlar (Gizli $and) ---")
for kitap in kitaplar_col.find(and_sorgusu):
    print(f"Kitap: {kitap['isim']}")

3. Dizileri Sorgulama

MongoDB, bir alanda birden fazla değer (diziler) saklamanıza olanak tanır.

Operatör

Amacı

$in

Belirtilen değerlerden herhangi birine sahip olan belgeleri bul.

$all

Belirtilen değerlerin tümüne sahip olan belgeleri bul.

Örnek: $in Operatörü

Yazarı 'Ahmet Bilgin' VEYA 'Ece Sönmez' olan tüm kitapları bulalım:

in_sorgusu = {

    "yazar": {
        "$in": ["Ahmet Bilgin", "Ece Sönmez"]
    }
}
print("\n--- Yazar Listesi İçindeki Kitaplar ($in) ---")
for kitap in kitaplar_col.find(in_sorgusu):
    print(f"Yazar: {kitap['yazar']}, Kitap: {kitap['isim']}")

4. Sonuçları Yönetme: Sıralama ve Sınırlandırma

Sorgu sonuçları üzerinde işlem yapmadan önce, onları sıralamak ve yalnızca belirli bir kısmını almak (limit) çok yaygın bir uygulamadır.

Sıralama (sort)

sort() metodu, sıralanacak alan adı ve sıralama düzeni (artan için 1, azalan için -1) parametrelerini alır.

# Yıla göre azalan sırada (-1) sırala
sirali_sonuclar = kitaplar_col.find({}).sort("yil", -1)
print("\n--- Yıla Göre Azalan Sıralama ---")
for kitap in sirali_sonuclar.limit(3): # İlk 3 sonucu gösterelim
    print(f"Kitap: {kitap['isim']}, Yıl: {kitap['yil']}")

Sınırlandırma (limit) ve Atlamak (skip)

  • limit(n): Sorgudan en fazla n adet belge döndürür.

  • skip(n): İlk n adet belgeyi atlar (genellikle sayfalama için kullanılır).

# İlk 1 sonucu atla, sonraki 2 sonucu al (Sayfa 2, her sayfada 2 sonuç)
sayfalama_sonuclari = kitaplar_col.find({}).skip(1).limit(2)
print("\n--- Skip ve Limit ile Sayfalama ---")
for kitap in sayfalama_sonuclari:
    print(f"Kitap: {kitap['isim']}")


Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Yazılım Nedir?

Python print()