- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
MongoDB'deki sorgulama işlemi, PyMongo'nun find_one()
ve find() metotları aracılığıyla
yapılır. Bu metotlar, SQL'deki SELECT
ifadesinin karşılığıdır.
Sorgulamanın anahtarı, arama kriterlerini Python sözlükleri
(dict) olarak tanımlamaktır.
Daha önceki adımlarda eklediğimiz verilerin bulunduğu kitaplar
koleksiyonunu kullanacağız:
from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')db = client['proje_db']kitaplar_col = db['kitaplar']
find_one)Eşleşen belgelerden yalnızca ilkini almak istediğinizde
find_one() metodunu kullanırsınız. Bu
metot doğrudan bir Python sözlüğü (bulunan belgeyi) veya eşleşme
yoksa None döndürür.
# Sorgu Kriteri: Yazar adı 'Ahmet Bilgin' olsun
sorgu_kriteri = {"yazar": "Ahmet Bilgin"}
kitap = kitaplar_col.find_one(sorgu_kriteri)
print("--- Tek Belge Sorgusu (find_one) ---")
if kitap:
print(f"Bulunan Kitap Adı: {kitap['isim']}")
print(kitap)
else:
print("Kitap bulunamadı.")
find)Filtreye uyan tüm belgeleri almak istediğinizde find()
metodunu kullanırsınız. Bu metot, sorgu sonuçları üzerinde
döngü kurmanızı sağlayan bir Yineleyici (Cursor) nesnesi
döndürür.
# Sorgu Kriteri: Yayınevi 'Yazılım Kitapları A.Ş.' olsun
sorgu_kriteri = {"yayinevi": "Yazılım Kitapları A.Ş."}
# find() metodu bir yineleyici (cursor) döndürür
sonuclar = kitaplar_col.find(sorgu_kriteri)
print("\n--- Çoklu Belge Sorgusu (find) ---")
for kitap in sonuclar:
# Her bir belgeyi tek tek işleriz
print(f"Yazar: {kitap['yazar']}, Kitap: {kitap['isim']}")
3.Boş
Sorgu: Tüm Belgeleri AlmaKriter belirtmezseniz (yani boş bir sözlük {}
geçirirseniz veya sözlük belirtmezsiniz.), koleksiyondaki tüm
belgeleri alırsınız:
for kitap in kitaplar_col.find({}):veya for kitap in kitaplar_col.find():# Koleksiyondaki tüm belgeleri getirprint("\n--- Tüm Belgeler ---")for kitap in kitaplar_col.find():# Sadece isim ve ID'yi yazdıralımprint(f"ID: {kitap['_id']}, İsim: {kitap['isim']}")
Bir find() veya find_one() sorgusu çalıştırdığınızda,
MongoDB varsayılan olarak eşleşen belgenin tüm alanlarını
döndürür. Eğer 20 alandan sadece 2 tanesine ihtiyacınız varsa,
diğer 18 alanı taşımanın bir anlamı yoktur.
Bu
optimizasyon tekniğine Projeksiyon (Projection) denir ve find()
metodunun ikinci parametresi olarak bir Python sözlüğü (dict) ile
uygulanır.
Projeksiyon sözlüğünde, hangi alanları istediğinizi
belirtmek için alan adına karşılık gelen değere 1
(göstermeyi aç) veya 0 (göstermeyi
kapat) yazılır.
1: Bu alanı göster.
0: Bu alanı gösterme.
Örnek: Yalnızca İsim ve Yazar Alanlarını Gösterme
Daha önceki kitaplar
koleksiyonumuzdan sadece isim ve yazar
alanlarını çekelim.
# Tüm kitapları sorgula
sorgu_filtresi = {}
# Projeksiyon: Hangi alanları istiyoruz (isim: 1, yazar: 1)
projeksiyon = {"isim": 1, "yazar": 1}
sonuclar = kitaplar_col.find(sorgu_filtresi, projeksiyon)
print("--- Projeksiyon ile Sadece İsim ve Yazar ---")
for kitap in sonuclar:
print(kitap)
_id Alanı
Kuralı: Kapatılması Gereken Tek AlanMongoDB, güvenlik ve benzersiz tanımlama nedeniyle, siz aksini
belirtmedikçe _id alanını her zaman
döndürür.
Eğer _id alanını da göstermek
istemiyorsanız, bunu projeksiyon sözlüğünde açıkça
belirtmeniz gerekir:
sorgu_filtresi = {}
# _id'yi kapatmak için 0 kullanılır
projeksiyon_id_kapali = {"isim": 1, "yazar": 1, "_id": 0}
sonuclar = kitaplar_col.find(sorgu_filtresi, projeksiyon_id_kapali)
print("\n--- Projeksiyon ile _id'yi Kapatma ---")
for kitap in sonuclar:
# Bu çıktıda _id alanı görünmeyecektir
print(kitap) Projeksiyonda genellikle hangi alanları istediğinizi (1
ile) belirtirsiniz.
Kural: Aynı projeksiyon sözlüğünde hem 1
hem de 0 kullanılamaz, tek istisna
_id'dir.
Eğer bir belgede çok sayıda alan varsa ve siz sadece bir veya iki alanı hariç tutmak istiyorsanız, diğer tüm alanlar otomatik olarak dahil edilir:
# Yazar hariç (0) tüm alanları getirprojeksiyon_yazar_haric = {"yazar": 0}print("\n--- Yazar Alanı Hariç Tutma ---")for kitap in kitaplar_col.find({}, projeksiyon_yazar_haric):# 'yazar' alanı hariç diğer tüm alanlar (isim, yayinevi, yil, stok, _id) dönecektir.print(f"Kitap Adı: {kitap['isim']}, Yazar: HARIÇ TUTULDU")
Yorumlar
Yorum Gönder