MongoDB find(): Veriye Sorgu Yazmaya Tam Başlangıç Rehberi
Bu rehber, MongoDB find() yöntemini gerçek dünya örnekleriyle sorgulama, filtreleme, sıralama ve sayfalama için nasıl kullanacağınızı açıklar. Yeni başlayanlar ve SQL’den geçiş yapanlar için idealdir.
MongoDB, esneklik ve performans için tasarlanmış popüler bir NoSQL veritabanıdır. Yapılandırılmış tablolar ve SQL kullanan geleneksel ilişkisel veritabanlarının aksine, MongoDB verileri esnek, JSON benzeri dökümanlarda saklar. Bu da onu dinamik veya yarı yapılandırılmış verilerle çalışan geliştiriciler için ideal kılar.
MongoDB’de en önemli işlemlerden biri veri sorgulamadır ve bunun için en yaygın kullanılan yöntem find()’dır. İster yeni başlıyor olun ister sorgu becerilerinizi geliştirmek isteyin, find()’ın nasıl çalıştığını anlamak MongoDB verinizi etkili biçimde gezmek ve yönetmek için kritik önemdedir.
Bir film veritabanını keşfettiğinizi hayal edin. 2000 yılından sonra vizyona giren tüm bilim kurgu filmlerini bulmak ya da belirli bir zaman aralığında yapılan tüm kullanıcı yorumlarını listelemek istiyorsunuz. İşte find() burada parlıyor.
Bu yazıda, bir koleksiyondan dökümanları çekmek, filtre uygulamak, alan projeksiyonu yapmak, sonuçları sıralamak ve performansı optimize etmek için find() yöntemini nasıl kullanacağınızı—hepsini sample_mflix veri kümesiyle çalışırken—öğreneceksiniz.
MongoDB’yi veri bilimi iş akışlarında uygulamalı olarak görmek için Python ile MongoDB’ye Giriş kursuna göz atın.
MongoDB’de find()’a Giriş
find() yöntemi, MongoDB’nin bir koleksiyondan dökümanları getirmek için birincil yoludur. Belirtilen sorguyla eşleşen dökümanlara işaret eden bir imleç (cursor) döndürür. Uygulamanızın ihtiyaçlarına göre bu imleci üzerinde yineleyebilir veya bir diziye dönüştürebilirsiniz.
query (opsiyonel): Dökümanları seçme ölçütlerini tanımlayan bir döküman. Bu parametreyi atlar veya boş bir döküman ({}) gönderirseniz, find() koleksiyondaki tüm dökümanları döndürür.
projection (opsiyonel): Hangi alanların döndürüleceğini belirleyen bir döküman. Alanları dahil edebilir (1) veya hariç tutabilirsiniz (0). Varsayılan olarak MongoDB tüm alanları, _id dahil, döndürür.
options (opsiyonel): Sorgu davranışını yapılandırmak için ek bir döküman. Sıralama düzeni, sayfalama limitleri, zaman aşımları ve indeks ipuçları gibi ayarlar yapabilirsiniz.
Örnek
Kavramları olabildiğince açık ve uygulanabilir kılmak için MongoDB Atlas örnek veri kümesini—özellikle sample_mflix veritabanını—kullanacağız. Bu veri kümesi; filmler, yorumlar, kullanıcılar ve sinemalar gibi koleksiyonlar içerir ve her örneği göstermek için makale boyunca bunlara atıfta bulunacağız.
db.books.find({year:{$gte:2000}},// query: books published in or after 2000{title:1,author:1,_id:0},// projection: include only title and author{sort:{title:1},limit:5}// options: sort by title, return only 5 books)Altyapı:
Bu sorgu şunları yapar:
2000 yılı ve sonrasında yayımlanan kitapları filtreler.
Yalnızca başlık ve yazar alanlarını döndürür (_id hariç tutulur).
Sonuçları başlığa göre alfabetik olarak (A-Z) sıralar.
Çıktıyı eşleşen ilk beş kitapla sınırlar.
Şekil 1. Bu sorgu, 2000 sonrası vizyona giren filmleri başlığa göre sıralar ve beş sonuçla sınırlar.
Sonuç bir imleçtir; üzerinde yineledikçe eşleşen dökümanları tembel yükleme (lazy loading) ile getirir. Sonuçları işlemek için .toArray() veya .forEach() kullanabilirsiniz.
MongoDB kabuğuna (mongosh) bağlıysanız ve sonucu bir değişkene atamazsanız, varsayılan olarak yalnızca ilk 20 döküman görüntülenir. Ek dökümanları görmek için yazıp Enter’a basın. Bu işlem, imleçten bir sonraki partiyi getirmeye devam edecektir.
> Not: Yukarıdaki, MongoDB’nin bir kısıtı değil, kabuğa özgü bir davranıştır. Çoğu MongoDB sürücüsünde (ör. Node.js, Python, Java) .toArray() çağırmak veya imleç üzerinde yinelemek tüm eşleşen sonuçları otomatik olarak getirir. İmleç davranışı, kullandığınız ortama ve dile bağlı olarak değişebilir.
Şekil 2. Bu sorgu tüm filmleri getirir, yalnızca _id alanını döndürür ve ek sonuçları almak için imleci kullanır.
NoSQL veritabanlarına yeniyseniz, NoSQL’e Giriş kursu bu eğitimle uyumlu temel kavramlar sunar.
İlk Sorgularınızı Yazmak
Film örneğiyle devam edelim; Bilim Kurgu türündeki tüm filmleri getirmek istediğinizi varsayalım. Bunu şöyle yaparsınız:
Her iki sorgu da aynı sonucu döndürür—türü Sci-Fi olan ve 2000 veya sonrasında vizyona giren filmler. Alanlar farklı olduğunda ilk biçim daha kısa ve tercih edilir.
Şekil 3. Aynı sonucu üreten sorguyu yazmanın farklı yolları.
find()’ı bir filtre hunisi gibi kullanın—her koşul sonuçlarınızı daraltır.
Karşılaştırma ve Mantıksal Operatörleri Kullanma
Şimdi sorgularınızı bir üst seviyeye taşımak için karşılaştırma ve mantıksal operatörleri nasıl kullanacağınızı gözden geçirelim.
Karşılaştırma operatörleri
$eq, $ne: eşit, eşit değil
$gt, $gte, $lt, $lte: büyüktür/küçüktür (veya eşit)
$in, $nin: dizide var/yok
Müşteri siparişlerini takip ettiğinizi ve 100$ ile 500$ arasındaki siparişleri istediğinizi düşünün:
Önemli: Bir projeksiyon belirtirken MongoDB sizden iki moddan birini seçmenizi ister: Ya belirli alanları dahil edin (1) ya da belirli alanları hariç tutun (0). Aynı projeksiyonda iki stili karıştıramazsınız; yalnızca _id alanı bir istisnadır ve diğer alanları dahil ederken hariç tutulabilir.
Şekil 4. Bu örnek, MongoDB’nin _id dışında tek bir projeksiyonda alan dahil etme ve hariç tutmayı karıştırmaya izin vermemesinin tetiklediği hatayı gösterir.
Sonuçları Sıralama, Sınırlandırma ve Atlama
Büyük veri kümeleriyle çalışırken, kullanıcılara verinin yalnızca bir kısmını aynı anda göstermek yaygındır—sayfalama (pagination) olarak bilinen bir teknik. Örneğin bir yayın platformu, binlercesini bir kerede yüklemek yerine sayfa başına 10 film gösterebilir. Bu yalnızca performansı iyileştirmekle kalmaz, kullanıcı deneyimini de artırır.
MongoDB’de sayfalama, sort(), limit() ve skip() kombinasyonuyla gerçekleştirilir.
SQL vs. MongoDB: Temel karşılaştırma
SQL geçmişiniz varsa, yaygın sayfalama kavramlarının nasıl karşılık geldiği şöyledir:
> Not: Derin sayfalama için skip() kullanmak (ör. skip(10000)) verimsiz olabilir; MongoDB yine de atlanan dökümanları tarar ve eler. Büyük veri kümelerinde daha iyi performans için, _id gibi indeksli alanları kullanarak aralık tabanlı sayfalamayı düşünün.
Birleşik örnek: Sayfa 3, sayfa başına 10 film, başlığa göre sıralı
Şekil 6.find() çağrısından sonra bir imleç alırsınız. Dökümanlar üzerinde yinelemek veya tüm sonuç kümesini bir diziye dönüştürmek için kullanabilirsiniz.
> Not: İmleç nesnesi mongosh’ta veya sürücüler (ör. Node.js, Python) üzerinden kodda mevcuttur. MongoDB Compass gibi GUI araçları imleçleri dahili olarak yönetir. Onlara doğrudan erişmez veya yinelemezsiniz.
Gelişmiş İmleç Seçenekleri
Sorgularınızı ince ayar yapmak için ek imleç yöntemlerini kullanabilirsiniz:
Bu, indekslerin kullanılıp kullanılmadığını ve sorgunuzun ne kadar verimli olduğunu gösterir.
İndekssiz:
Şekil 7. İndekslemeden önce sorguda explain() çalıştırın.
Bir indeks oluşturma:
Şekil 8. type alanı üzerinde basit bir indeks oluşturun.
İndeksle:
Şekil 9. Aynı sorguyu bu kez bir indeks kullanarak explain() ile çalıştırın.
Daha önce CollScan (koleksiyonu tarama) olan aşamanın Fetch + IXSCAN’e dönüştüğünü görebilirsiniz; bu temelde indeksi kullanma + indekste yer almayan diğer verileri aramadır (çünkü her şeyi döndürüyoruz).
Sorguları Görselleştirmek için MongoDB Compass Kullanma
Görsel araçları tercih ediyorsanız, MongoDB Compass resmi GUI istemcisidir. Şunları yapmanıza olanak tanır:
Filtreler kullanarak görsel olarak sorgu oluşturma.
Dökümanları ve indeksleri önizleme.
Sorgu performansını optimize etme ve doğrulama.
Hatta “JSON görünümü”ne geçerek sorguları kodunuza kopyalayıp yapıştırabilirsiniz.
"Geçen ay 100$’ın üzerinde sipariş veren Brezilya’daki tüm müşterileri göster."
Atlas, find() veya $search kullanarak eşleşen bir MongoDB sorgusu önerir. Özellikle sözdiziminden emin olmadığınızda mükemmel bir üretkenlik artırıcıdır.
Şekil 10. Doğal dilden bir sorgu üretmek için Compass’ı kullanın.
Yaygın Hatalar ve Bunlardan Kaçınma Yolları
İndekslenmemiş alanları sorgulamak → Yavaş performansa yol açar
Büyük sonuç kümeleri → Sayfalama kullanın (limit + skip)
Verimsiz projeksiyonlar → Her zaman yalnızca gereken alanları projekte edin
Tür uyumsuzlukları → Alan türlerinin eşleştiğinden emin olun (ör. sayı vs. metin)
Projeksiyonlarda dahil ve hariç karıştırmak → _id dışında izin verilmez
MongoDB find() ile SQL’in Karşılaştırılması
SQL geçmişiniz varsa, MongoDB’nin find()’ının aşina olduğunuz SQL sorgularıyla nasıl karşılaştırıldığını anlamak geçişi kolaylaştırabilir. İşte yaygın işlemlerin genel bir karşılaştırması:
Kavram
SQL Örneği
MongoDB Karşılığı
Temel sorgu
SELECT * FROM users WHERE age >= 18
db.users.find({ age: { $gte: 18 } })
Alan seçimi
SELECT name, email FROM users
db.users.find({}, { name: 1, email: 1, _id: 0 })
Sıralama
ORDER BY created_at DESC
.sort({ createdAt: -1 })
Sınırlandırma
LIMIT 10
.limit(10)
Atlama
OFFSET 10
.skip(10)
Gördüğünüz gibi, MongoDB’nin sözdizimi JSON formatında daha JavaScript benzeri ve ifadeliyken, SQL daha bildirimseldir ve yapılandırılmıştır. Bu paralellikleri bilmek, MongoDB’ye daha hızlı alışmanıza yardımcı olacaktır.
Özet ve En İyi Uygulamalar
find()’ı veri filtreniz olarak düşünün—kesin sonuçlar için koşulları birleştirin.
Açıklık ve performans için her zaman yalnızca gerekli alanları projekte edin.
Yavaş taramalardan kaçınmak için indeks kullanın.
Görsel geri bildirim ve hızlı yineleme için Compass’ı kullanın.
Sorguları daha hızlı üretmek için MongoDB Atlas’ın yapay zekâ asistanından yararlanın.
Sonuçlar üzerinde ayrıntılı kontrol için gelişmiş imleç seçeneklerini keşfedin.
İster bir girişim panosu, ister bir veri analizi aracı, ister bir e-ticaret arka ucu inşa ediyor olun, find()’a hakim olmak MongoDB deneyiminizi daha sorunsuz, daha hızlı ve daha etkili hale getirecektir.
Gelecek yazılarda daha fazla MongoDB içgörüsü için bizi takip edin!
Pratikte imleç nedir? Neden find() bana doğrudan bir dizi sonuç vermiyor?⌄
MongoDB, dökümanları partiler halinde yükleyen (tembel yükleme) bir imleç döndürür. Bu, büyük koleksiyonlar için verimlidir, ancak sonuç olarak bir dizi bekleyen yeni başlayanları şaşırtabilir.
find()’ın üç parametresi var ama genelde neden yalnızca ikisini görüyorum? Üçüncü argüman (options) örneklerde neden nadiren gösteriliyor?⌄
Çünkü çoğu geliştirici, seçenekler nesnesine geçmek yerine .sort(), .limit() ve .skip() gibi zincirlenen yöntemleri kullanır. Bazı özellikler (ör. hint, readConcern, collation) seçenekler dökümanını veya ayrı yöntem çağrılarını kullanmayı gerektirir.
Oluşturduğum indeksi find() neden kullanmıyor? Bir indeks oluşturdum ama find() sorgum hâlâ yavaş.⌄
Tüm sorgular otomatik olarak indeks kullanmaz. Alan sırası, veri türleri ve sıralama (collation) ayarları indeks kullanımını etkileyebilir. MongoDB’nin bir indeksi (IXSCAN) kullanıp kullanmadığını ya da tam tarama (COLLSCAN) yapıp yapmadığını kontrol etmek için .explain("executionStats") kullanın.
Projeksiyonum gerçekten performansı artırıyor mu? Yalnızca iki alan projekte ediyorum ama daha hızlı görünmüyor.⌄
Projeksiyona alınan alanlar bir indekste değilse, MongoDB hâlâ tam dökümanı diskten getirmek zorundadır. Döküman bakışlarını önleyerek sorgunun tamamen indeksten karşılanmasını sağlayan kapsayıcı (covering) indeksleri kullanın.
Gruplama veya özetleme için find() kullanabilir miyim? Her yıl vizyona giren film sayısını find() ile sayabilir miyim?⌄
Hayır. find() dökümanları getirmek içindir. Gruplama veya özetleme için Birleştirme (Aggregation) Çerçevesini ($group, $count vb.) kullanın. find() + .countDocuments() temel sayımları karşılasa da, gerçek analitik ihtiyaçlar için .aggregate() kullanılmalıdır.
MongoDB’de find() ile findOne() arasındaki fark nedir?⌄
find() eşleşen tüm dökümanlara bir imleç döndürürken, indOne() ilk eşleşen dökümanı doğrudan döndürür. Yalnızca tek bir sonuca ihtiyacınız olduğunda findOne() kullanın.
MongoDB’de find() kullanarak bir dizi alanını nasıl sorgularım?⌄
Dizi öğelerini doğrudan eşleştirebilirsiniz. Örneğin, { tags: "tech" } ifadesi, tags dizisinde “tech” varsa eşleşir. Daha karmaşık koşullar için $elemMatch kullanın.
MongoDB find() sorgularında düzenli ifadeleri kullanabilir miyim?⌄
Evet, MongoDB düzenli ifade kalıplarını destekler; dizelerde büyük/küçük harf duyarsız desen eşleştirme için { title: /sci-fi/i } gibi sözdizimini kullanabilirsiniz.
MongoDB’de find()’ı bir tarih aralığıyla nasıl kullanırım?⌄
Bir indekssiz find() kullanmanın performans etkisi nedir?⌄
İndekslenmemiş alanlardaki sorgular, büyük veri kümeleri için yavaş olan tam koleksiyon taramalarını tetikler. Sık sorgulanan alanları daima indeksleyin.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
MongoDB, esneklik ve performans için tasarlanmış popüler bir NoSQL veritabanıdır. Yapılandırılmış tablolar ve SQL kullanan geleneksel ilişkisel veritabanlarının aksine, MongoDB verileri esnek, JSON benzeri dökümanlarda saklar. Bu da onu dinamik veya yarı yapılandırılmış verilerle çalışan geliştiriciler için ideal kılar.
MongoDB’de en önemli işlemlerden biri veri sorgulamadır ve bunun için en yaygın kullanılan yöntem
find()’dır. İster yeni başlıyor olun ister sorgu becerilerinizi geliştirmek isteyin,find()’ın nasıl çalıştığını anlamak MongoDB verinizi etkili biçimde gezmek ve yönetmek için kritik önemdedir.Bir film veritabanını keşfettiğinizi hayal edin. 2000 yılından sonra vizyona giren tüm bilim kurgu filmlerini bulmak ya da belirli bir zaman aralığında yapılan tüm kullanıcı yorumlarını listelemek istiyorsunuz. İşte
find()burada parlıyor.Bu yazıda, bir koleksiyondan dökümanları çekmek, filtre uygulamak, alan projeksiyonu yapmak, sonuçları sıralamak ve performansı optimize etmek için
find()yöntemini nasıl kullanacağınızı—hepsinisample_mflixveri kümesiyle çalışırken—öğreneceksiniz.MongoDB’yi veri bilimi iş akışlarında uygulamalı olarak görmek için Python ile MongoDB’ye Giriş kursuna göz atın.
MongoDB’de find()’a Giriş
find()yöntemi, MongoDB’nin bir koleksiyondan dökümanları getirmek için birincil yoludur. Belirtilen sorguyla eşleşen dökümanlara işaret eden bir imleç (cursor) döndürür. Uygulamanızın ihtiyaçlarına göre bu imleci üzerinde yineleyebilir veya bir diziye dönüştürebilirsiniz.Tam sözdizimi şöyledir:
Parametreler
query(opsiyonel): Dökümanları seçme ölçütlerini tanımlayan bir döküman. Bu parametreyi atlar veya boş bir döküman ({}) gönderirseniz,find()koleksiyondaki tüm dökümanları döndürür.projection(opsiyonel): Hangi alanların döndürüleceğini belirleyen bir döküman. Alanları dahil edebilir (1) veya hariç tutabilirsiniz (0). Varsayılan olarak MongoDB tüm alanları,_iddahil, döndürür.options(opsiyonel): Sorgu davranışını yapılandırmak için ek bir döküman. Sıralama düzeni, sayfalama limitleri, zaman aşımları ve indeks ipuçları gibi ayarlar yapabilirsiniz.Örnek
Kavramları olabildiğince açık ve uygulanabilir kılmak için MongoDB Atlas örnek veri kümesini—özellikle
sample_mflixveritabanını—kullanacağız. Bu veri kümesi; filmler, yorumlar, kullanıcılar ve sinemalar gibi koleksiyonlar içerir ve her örneği göstermek için makale boyunca bunlara atıfta bulunacağız.Bu sorgu şunları yapar:
_idhariç tutulur).Şekil 1. Bu sorgu, 2000 sonrası vizyona giren filmleri başlığa göre sıralar ve beş sonuçla sınırlar.
Sonuç bir imleçtir; üzerinde yineledikçe eşleşen dökümanları tembel yükleme (lazy loading) ile getirir. Sonuçları işlemek için
.toArray()veya.forEach()kullanabilirsiniz.MongoDB kabuğuna (
mongosh) bağlıysanız ve sonucu bir değişkene atamazsanız, varsayılan olarak yalnızca ilk 20 döküman görüntülenir. Ek dökümanları görmek için yazıp Enter’a basın. Bu işlem, imleçten bir sonraki partiyi getirmeye devam edecektir.> Not: Yukarıdaki, MongoDB’nin bir kısıtı değil, kabuğa özgü bir davranıştır. Çoğu MongoDB sürücüsünde (ör. Node.js, Python, Java)
.toArray()çağırmak veya imleç üzerinde yinelemek tüm eşleşen sonuçları otomatik olarak getirir. İmleç davranışı, kullandığınız ortama ve dile bağlı olarak değişebilir.Şekil 2. Bu sorgu tüm filmleri getirir, yalnızca
_idalanını döndürür ve ek sonuçları almak için imleci kullanır.NoSQL veritabanlarına yeniyseniz, NoSQL’e Giriş kursu bu eğitimle uyumlu temel kavramlar sunar.
İlk Sorgularınızı Yazmak
Film örneğiyle devam edelim; Bilim Kurgu türündeki tüm filmleri getirmek istediğinizi varsayalım. Bunu şöyle yaparsınız:
Şimdi, yalnızca 2000 yılı ve sonrasında vizyona giren filmleri istiyorsunuz:
Peki ikisini birden isterseniz? Koşulları birleştirin:
Alternatif olarak, bunu
$andkullanarak açıkça yazabilirsiniz:Her iki sorgu da aynı sonucu döndürür—türü Sci-Fi olan ve 2000 veya sonrasında vizyona giren filmler. Alanlar farklı olduğunda ilk biçim daha kısa ve tercih edilir.
Şekil 3. Aynı sonucu üreten sorguyu yazmanın farklı yolları.
find()’ı bir filtre hunisi gibi kullanın—her koşul sonuçlarınızı daraltır.Karşılaştırma ve Mantıksal Operatörleri Kullanma
Şimdi sorgularınızı bir üst seviyeye taşımak için karşılaştırma ve mantıksal operatörleri nasıl kullanacağınızı gözden geçirelim.
Karşılaştırma operatörleri
$eq,$ne: eşit, eşit değil$gt,$gte,$lt,$lte: büyüktür/küçüktür (veya eşit)$in,$nin: dizide var/yokMüşteri siparişlerini takip ettiğinizi ve 100$ ile 500$ arasındaki siparişleri istediğinizi düşünün:
Mantıksal operatörler
$and,$or,$nor,$notŞimdi de “Books” kategorisindeki ya da fiyatı 20$’ın altında olan ürünleri göstermek istediğinizi düşünün. İşte örnek bir sorgu:
İç içe alanları sorgulama
Nokta gösterimini kullanarak iç içe alanlara erişebilirsiniz:
Alan Projeksiyonu
Projeksiyon, yalnızca ihtiyacınız olanları döndürmenizi sağlar; bu da performansı ve okunabilirliği önemli ölçüde iyileştirebilir.
Önemli: Bir projeksiyon belirtirken MongoDB sizden iki moddan birini seçmenizi ister: Ya belirli alanları dahil edin (1) ya da belirli alanları hariç tutun (0). Aynı projeksiyonda iki stili karıştıramazsınız; yalnızca
_idalanı bir istisnadır ve diğer alanları dahil ederken hariç tutulabilir.✅ Geçerli (yalnızca dahil):
✅ Geçerli (yalnızca hariç):
❌ Geçersiz (dahil ve hariç karışık):
Tek istisna, diğer alanları dahil ederken hariç tutabileceğiniz
_idalanıdır:Şekil 4. Bu örnek, MongoDB’nin
_iddışında tek bir projeksiyonda alan dahil etme ve hariç tutmayı karıştırmaya izin vermemesinin tetiklediği hatayı gösterir.Sonuçları Sıralama, Sınırlandırma ve Atlama
Büyük veri kümeleriyle çalışırken, kullanıcılara verinin yalnızca bir kısmını aynı anda göstermek yaygındır—sayfalama (pagination) olarak bilinen bir teknik. Örneğin bir yayın platformu, binlercesini bir kerede yüklemek yerine sayfa başına 10 film gösterebilir. Bu yalnızca performansı iyileştirmekle kalmaz, kullanıcı deneyimini de artırır.
MongoDB’de sayfalama,
sort(),limit()veskip()kombinasyonuyla gerçekleştirilir.SQL vs. MongoDB: Temel karşılaştırma
SQL geçmişiniz varsa, yaygın sayfalama kavramlarının nasıl karşılık geldiği şöyledir:
SQL’de temel sorgu:
Aynısı MongoDB’de şu şekilde ifade edilebilir:
SQL’de alan seçimi:
MongoDB’de alan seçimi:
Şimdi, yaygın sorgu işlemlerine birkaç örnek daha bakalım:
Sıralama:
ORDER BY title ASC.sort({ title: 1 })Sınırlandırma:
LIMIT 10.limit(10)Atlama:
OFFSET 10.skip(10)Bu paralellikleri anlamak, SQL kullanıcılarının MongoDB’nin döküman tabanlı sorgu sistemine daha kolay geçiş yapmasına yardımcı olur.
Sonuçları sıralama
Sıralama, sonuçlarınızı belirli bir alana göre düzenlemenize yardımcı olur—örneğin filmleri başlığa göre alfabetik olarak sıralamak için:
1artan sıralama anlamına gelir (A-Z, 0-9)-1azalan sıralama anlamına gelir (Z-A, 9-0)Sonuçları sınırlandırma
Yalnızca belirli sayıda sonuç döndürün—örneğin ilk 10’u:
Bu, “İlk 10” listeleri veya ilk görünümler için kullanışlıdır.
Sonuçları atlama
Dökümanları atlamak için kullanın. Genellikle sayfalama için limit() ile birlikte kullanılır:
Bu, ilk 10 dökümanı atlar ve sonraki 10’u döndürür; sayfaBoyutu = 10 iken etkili biçimde Sayfa 2’yi gösterir.
Sayfalama formülü:
> Not: Derin sayfalama için
skip()kullanmak (ör.skip(10000)) verimsiz olabilir; MongoDB yine de atlanan dökümanları tarar ve eler. Büyük veri kümelerinde daha iyi performans için,_idgibi indeksli alanları kullanarak aralık tabanlı sayfalamayı düşünün.Birleşik örnek: Sayfa 3, sayfa başına 10 film, başlığa göre sıralı
Bu desen, “daha fazla yükle” veya sonsuz kaydırma gibi özellikler için de kullanışlıdır.
Şekil 5. Bu sorgu, sonuçların üçüncü sayfasını (sayfa başına 10 film) başlığa göre sıralı olarak getirir.
İmleçlerle Çalışma
find()yöntemi, sonuç kümesine işaret eden bir imleç döndürür. Üzerinde yineleyebilirsiniz:Ya da bir diziye dönüştürebilirsiniz:
Şekil 6.
find()çağrısından sonra bir imleç alırsınız. Dökümanlar üzerinde yinelemek veya tüm sonuç kümesini bir diziye dönüştürmek için kullanabilirsiniz.> Not: İmleç nesnesi
mongosh’ta veya sürücüler (ör. Node.js, Python) üzerinden kodda mevcuttur. MongoDB Compass gibi GUI araçları imleçleri dahili olarak yönetir. Onlara doğrudan erişmez veya yinelemezsiniz.Gelişmiş İmleç Seçenekleri
Sorgularınızı ince ayar yapmak için ek imleç yöntemlerini kullanabilirsiniz:
maxTimeMS(ms): sorgu çok uzun sürerse iptal ederhint(): MongoDB’nin belirli bir indeksi kullanmasını zorlarbatchSize(n): parti başına döküman sayısını kontrol ederMülakatlara mı hazırlanıyorsunuz? En İyi 25 MongoDB Mülakat Sorusu ve Cevabını inceleyerek
find()gibi temel kavramlara hakimiyetinizi test edin.Indeksler ve Performans Optimizasyonu
İndeksler, kopya kağıdı gibidir—MongoDB’nin dökümanları daha hızlı getirmesine yardımcı olur.
Bir indeks oluşturma
.explain() kullanma
Bu, indekslerin kullanılıp kullanılmadığını ve sorgunuzun ne kadar verimli olduğunu gösterir.
İndekssiz:
Şekil 7. İndekslemeden önce sorguda
explain()çalıştırın.Bir indeks oluşturma:
Şekil 8. type alanı üzerinde basit bir indeks oluşturun.
İndeksle:
Şekil 9. Aynı sorguyu bu kez bir indeks kullanarak
explain()ile çalıştırın.Daha önce
CollScan(koleksiyonu tarama) olan aşamanınFetch + IXSCAN’e dönüştüğünü görebilirsiniz; bu temelde indeksi kullanma + indekste yer almayan diğer verileri aramadır (çünkü her şeyi döndürüyoruz).Sorguları Görselleştirmek için MongoDB Compass Kullanma
Görsel araçları tercih ediyorsanız, MongoDB Compass resmi GUI istemcisidir. Şunları yapmanıza olanak tanır:
Hatta “JSON görünümü”ne geçerek sorguları kodunuza kopyalayıp yapıştırabilirsiniz.
Sorgu Oluşturmak için Atlas + Yapay Zekâ Kullanma
MongoDB Atlas kullanıyorsanız, yapay zekâ destekli sorgu oluşturucuyla Atlas Search’ten yararlanabilirsiniz.
Sadece şu türde doğal dilde bir istem yazın:
"Geçen ay 100$’ın üzerinde sipariş veren Brezilya’daki tüm müşterileri göster."
Atlas,
find()veya$searchkullanarak eşleşen bir MongoDB sorgusu önerir. Özellikle sözdiziminden emin olmadığınızda mükemmel bir üretkenlik artırıcıdır.Şekil 10. Doğal dilden bir sorgu üretmek için Compass’ı kullanın.
Yaygın Hatalar ve Bunlardan Kaçınma Yolları
limit+skip)_iddışında izin verilmezMongoDB find() ile SQL’in Karşılaştırılması
SQL geçmişiniz varsa, MongoDB’nin
find()’ının aşina olduğunuz SQL sorgularıyla nasıl karşılaştırıldığını anlamak geçişi kolaylaştırabilir. İşte yaygın işlemlerin genel bir karşılaştırması:Kavram
SQL Örneği
MongoDB Karşılığı
Temel sorgu
SELECT * FROM users WHERE age >= 18db.users.find({ age: { $gte: 18 } })Alan seçimi
SELECT name, email FROM usersdb.users.find({}, { name: 1, email: 1, _id: 0 })Sıralama
ORDER BY created_at DESC.sort({ createdAt: -1 })Sınırlandırma
LIMIT 10.limit(10)Atlama
OFFSET 10.skip(10)Gördüğünüz gibi, MongoDB’nin sözdizimi JSON formatında daha JavaScript benzeri ve ifadeliyken, SQL daha bildirimseldir ve yapılandırılmıştır. Bu paralellikleri bilmek, MongoDB’ye daha hızlı alışmanıza yardımcı olacaktır.
Özet ve En İyi Uygulamalar
find()’ı veri filtreniz olarak düşünün—kesin sonuçlar için koşulları birleştirin.İster bir girişim panosu, ister bir veri analizi aracı, ister bir e-ticaret arka ucu inşa ediyor olun,
find()’a hakim olmak MongoDB deneyiminizi daha sorunsuz, daha hızlı ve daha etkili hale getirecektir.Gelecek yazılarda daha fazla MongoDB içgörüsü için bizi takip edin!
MongoDB becerilerinizi belgelemek mi istiyorsunuz? Seçeneklerinizi keşfetmek için Kapsamlı MongoDB Sertifikasyon Rehberini okuyun.