MongoDB Nedir? Nasıl Kullanılır ? — Bölüm 2

Tarık Kabasakal
7 min readMar 6, 2021

--

Bir önceki yazıda MongoDB nedir, nasıl yüklenir, temel sorgular nelerdir gibi bilgiler verildi. Bu yazıda ise koleksiyonlara belge eklemek ve koleksiyonlarda sorgu yapmak ile ilgili bilgi verilecektir.

Bölüm 1 : Okumak için tıklayınız.

Bölüm 3 : Okumak için tıklayınız.

MongoDB Koleksiyona Belge Ekleme İşlemleri (Insert)

MongoDB’de bir koleksiyona belge eklemenin 2 farklı yolu vardır. Bunlardan biri tek belge eklemek diğeri ise çoklu belge eklemek.

Tek Belge Ekleme İşlemi

Öncelikle göründüğü gibi koleksiyona belge eklerken bir şemaya gerek duyulmuyor ve istenilen her türden veri eklenebiliyor(String, List, Json, Number vb).

Burada dikkat edilmesi gereken şeylerden biride ekleme yaptığımızda bize gönderilen ‘insertedId’.

MongoDB’de, bir koleksiyonda depolanan her belge, birincil anahtar görevi gören benzersiz bir _id alanı gerektirir. Eklenen bir belgede _id alanı atlanırsa, MongoDB _id alanı için otomatik olarak bir ObjectId oluşturur. Oluşturulan _id MongoDB tarafından otomatik olarak indekslenir.

ObjectId’nin tamamı rastgele oluşturulmaz. Bu değerin eşsiz olması için belirli bir mantıkla oluşturulur.

  • İlk 4 byte => Unix timestamp değeri(1 Ocak 1970’ten itibaren işlem anına kadar olan zamanın saniyesi)
  • Sonraki 5 byte => Rastgele sayı
  • Son 3 byte => Rastgele bir değerle başlatılan ve artan bir sayaç değeri

Çoklu Belge Ekleme İşlemi

Birden fazla veri ekleme örneği

db.collection_name.insertMany() işleminde en çok dikkat edilmesi gereken nokta () parantezinin içinde köşeli parantez olmasıdır çünkü bir liste veriliyor fonksiyona.

Bu 2 kullanımın dışında direk db.collection_name.insert() diyede kullanım yapılabilir. Eğer köşeli parantez içinde değer gönderilirse insertMany() gibi çalışır, tek değer gönderilirse insertOne() gibi çalışır.

MongoDB Belgelerde Sorgulama İşlemleri(Query)

MongoDB’nin sorgulama dili çok esnek ve çok geniştir. Burada temel yapılardan bahsedilecektir. Daha detaylı veya ihtiyacınız olan yapıları MongoDB’nin dokümantasyonundan bulabilirsiniz.

Query Documents:https://docs.mongodb.com/manual/tutorial/query-documents/

Not:Sorgulama dili anlatılırken, ekleme bölümünde kullanılan örnekler üzerinden gidilecektir. Üzerine bazı eklemeler yapılmıştır.

Not:Yazılan kodlarda veritabanı seçimi yapılmış(use db_name) ve o şekilde devam edilmektedir.

MongoDB’de sorgulamalar genellikle .find() uzantısıyla yapılır.

Koleksiyondaki tüm belgeleri seçmek için find() methodunun sorgu filtreleme kısmını boş bırakın.

db.collection_name.find({})

Eğer özel bir alana göre arama işlemi yapacaksanız { <alan1> : <deger1>, <alan2> : <deger2>, … } şeklinde find alanının içi doldurulmalıdır. Aranacak alan kısmı için herhangi bir sınır yoktur. Bu alanlar birbirine ve(AND) işlemi ile bağlıdır.

db.collection_name.find({“alan_adı”:”deger”})

Sorgu Operatörleri

Yapılan sorguları daha detaylandırmak için sorgu operatörleri vardır. Bunlar daha esnek sorgulama yapılabilinmesini sağlar.

Karşılaştırma operatörleri;

$eq => Belirtilen bir değere eşit olan tüm değerleri eşleştirir

$gt => Belirtilen bir değerden büyük olan tüm değerleri eşleştirir

$gte => Belirtilen bir değerden büyük veya eşit olan tüm değerleri eşleştirir

$in => Bir dizide belirtilen değerlerden herhangi biriyle eşleşir

$lt => Belirtilen bir değerden küçük olan tüm değerleri eşleştirir

$lte => Belirtilen bir değerden küçük veya eşit olan tüm değerleri eşleştirir

$ne => Belirtilen bir değere eşit olmayan tüm değerleri eşleştirir

$nin => Bir dizide belirtilen değerlerin hiçbiriyle eşleşmez

Mantık operatörleri;

$and => Sorgu cümleciklerini mantıksal bir ve(AND) ile birleştirir, her iki cümlenin koşullarıyla eşleşen tüm belgeleri döndürür

$not => Bir sorgu ifadesinin etkisini tersine çevirir ve sorgu ifadesiyle eşleşmeyen belgeleri döndürür

$nor => Mantıksal NOR ile sorgu cümleciklerini birleştirir, her iki cümleyle eşleşmeyen tüm belgeleri döndürür

$or => Sorgu cümlelerini mantıksal veya(OR) ile birleştirir, her iki cümlenin koşullarıyla eşleşen tüm belgeleri döndürür.

Yukarıdaki örneklerden daha fazla sorgu operatörleri vardır. Geriye kalan operatörleri ihtiyacınıza göre dokümantasyondan araştırabilirsiniz.

Sorgu operatör dokümantasyonu: https://docs.mongodb.com/manual/reference/operator/query/#query-selectors

Sorgu operatörleri kullanarak çok daha detaylı sorgulamalar yapılabilir. Sorgu operatörlerin kullanışı ise { <alan1> :{ <operator> : <deger1> }, … }

Karşılaştırma operatör örnekleri;

username alanı username1 veya username4 olanları görüntüleme(Belirli bir listenin içindeki değerler kontrol ediliyor)
yaşı 13 ve 13 den ufak olanları görüntüleme

Mantık operatör örnekleri;

Aşağıdaki örnekte username alanı username1 e eşit olan ve yaşı 12 den küçük olanları listelemesini istiyoruz. Kayıtlarımız username alanı username1 olan 2 kayıt var sorgumuzda bize tek kayıt dönmektedir.

Aşağıdaki örnekte username alanı username2 olan veya yaşı 30 ve 30dan büyük alanların gelmesini istiyoruz. Toplamda 5 kayıt var ve bizim istediğimiz sorgu parametrelerine uyan 3 kayıt mevcuttur. Veya(OR) sorgu operatörü ile bunu görebiliyoruz. Burada dikkat edilmesi gereken nokta ise veya(OR) operatörünü kullandıktan sonra köşeli parantez ile parametreleri veriyoruz.

Aşağıdaki örnekte username alanı username1 olan ve yaşı 20 den büyük veya 10 a eşit olan kayıtları buluyoruz. Bu örnekte ve(AND) ile veya(OR) birlikte kullanılmaktadır. İstediğimiz parametrelere uyan tek bir kayıt vardır.

Eğer bir alanın içinde farklı bir anahtar-değer çifti içeren veriler varsa buna erişmek için nokta(.) kullanılır. Sorgu operatörlerinin kullanımı gibi kurallar bu durum içinde geçerlidir.

Belgelerde(documents) değer olarak listelerde tutuluyor ve bu listelerdede filtreleme işlemleri yapılabilmektedir.

Aşağıdaki örnekte all operatörü kullanılarak filtreleme yapılmak istenmiştir. İlk örnekte tags1 ve tags3 aynı veride olup olmaması kontrol edilmiştir ve öyle bir kayıt olmadığı için geri dönüş olmamıştır. İkinci örnekte ise tags1 ve tags2 kontrol edilmiştir. Kontrol edilen parametrelerde kayıt olduğu için geri dönüş olmuştur.

Fakat hem tags1 hemde tags2 verilerinin getirilmesi istenirse onun içinde yukarıda gördüğümüz gibi in operatörünü kullanabiliriz.

Girilen listelerin içinde sadece String veya Number değil JSON yapılarıda olabilir. Bu duruma örnek olabilmesi için aşağıdaki verileri yeni bir koleksiyona ekliyoruz.

Bu durumlarda şu şekilde basit sorgulamalar yapılabilir;

Yukarıda bahsettiğimiz sorgu operatörleri ve anahtar — değer ile ilgili kuralların birleşimleri bu durumda kullanılabilir. Örnek verilecek olursa instock liste alanının içindeki qty alanını 20 ve 20 den aşağısında olan değerlere sahip belgeleri aşağıdaki gibi görebiliriz.

Aşağıda instock liste alanında qty alanı için 10 dan büyük ve 20 veya 20 den küçük olan değerlere sahip belgelerin bulunması amaçlanmıştır.

MongoDB’de find() methodunun genel kullanımı yukarıdaki örnekler ile gösterilmiştir. find() methodu bu anlatılanlardan çok daha güçlüdür. Bunun için dokümantasyonu incelemenizi tavsiye ederim. Ayrıca find() methodunun bazı türevleri vardır. Misal findOne() methodu find() ile aynı şekilde çalışır sadece geriye 1 adet değer döndürür. Döndürdüğü değer veritabanında ilk karşılaştığı değerdir. Yukarıdaki örneği findOne() ile yapacak olursa aşağıdaki gibi bir çıktı elde ederiz.

find() methodu hakkında bahsetmek istediğim son bir nokta var buda gelen verilerin kullanıcıya sunulmasıdır. find({<anahtar>:<deger>}) şeklinde gördük fakat sadece belirli alan/alanları görmek için find methodu find({<anahtar>:<deger>} , {<anahtar>:1}) buradaki 1 alanı o alan gösterilsin başka alanlar gösterilmesin demektir. Bu kullanım biraz karmaşık gelebilir fakat bir kaç örnekte yapısı anlaşılmaktadır. Buradaki önemli nokta biz _id alanını özellikle kapatmadığımız sürece her zaman gelmesidir.

Sadece item alanı ve _id alanı gözüksün örneği;

Sadece item alanı gözüksün örneği;

Sadece _id ve instock içindeki warehouse alanı gözüksün örneği;

Warehouse harici tüm alanlar gözüksün örneği(Tek bir alanı kapatmak için o alana 0 vermek yeterlidir);

Koleksiyonlara belge ekleme ve koleksiyondaki belgeleri temel olarak sorgulama işlemleri anlatımı bitmiştir. Yukarıda bahsedildiği gibi MongoDB bu anlatılanlardan çok daha güçlü ve esnek bir yapıya sahiptir. Update ve Delete işlemleri için Bölüm-3'ü okuyunuz.

--

--