1. Anasayfa
  2. Programlama

MongoDB Nedir, Nasıl Kullanılır?

MongoDB Nedir, Nasıl Kullanılır?
0

MongoDB Nedir?

MongoDB birçok data (veri)  depolayabildiğimiz ve daha sonrasında bu verilerle verimli şekilde çalışabileceğimiz bir NOSQL veri tabanıdır.  NOSQL olmasının sebebi SQL dataları şemalarla ayrı ayrı tutarken, NOSQL dataları document’lerle tutar. Aynı zamanda MongoDB üzerinde farklı database’ler çalıştırmamıza izin verir. JSON data formatı kullanılır. ( JSON nedir için bu yazıma göz atabilirsiniz.)

 

 

Drivers : Python, Java, Php vb. programlama dilleriyle DB kullanacağımız zaman, application DB ye bağlanır .

Shell : Basit fakat çok güçlü JavaScript shell kullanır ve bunun yardımı ile veri tabanlarının işlenmesi çok daha etkin hale gelir.

 

 

Database: Birden fazla collection ve document tutar.

Collection : Databaseleri tutar. Data depolanacağı zaman otomatik oluşturulur.

Documents: DB’de tutulan data parçalarıdır. Data depolanacağı zaman otomatik oluşturulur. Direkt olarak DB’ye eklenmez collection kullanımı şart. Bir document, JSON’da olduğu gibi fields ve values vardır . Field’lar string,int vb. value içerir.

 

CRUD İşlemleri

Create : insertOne(data) veya insertMany(data) ile kullanılır. Bir adet data eklemek için insertOne() , birden fazla data eklemek için insertMany() kullanılır.

Read : find(filter) veya findOne(filter) ile kullanılır. find() kullanımı ilk 20 datayı otomatik olarak yazdırır. 20’den fazla data var ise ve bütün dataları okumak istersek pretty() kullanımı gerekmektedir. findOne() ise içine “filter” almadığı zaman ilk datayı getirir, filter kullanımı ise özellikle bir datayı getirmek istersek örneğin; id’si 2 olan datayı getir demek istersek, findOne({_id : ObjectId(“2”)}) şeklinde kullanabiliriz.

Update : updateOne(filter,data), updateMany(filter,data), replaceOne(filter,data) metotları ile kullanabiliriz. Örneğin ;name ‘ leri A olan datalara control : true eklemek istersek updateMany({name : “A”},{$set{control : “true”}}) şeklinde kullanım sağlarız. Fakat biz aynı metodu updateOne({name : “A”},{$set{control : “true”}}) şeklinde kullanırsak, bize name ‘i ilk A olan datayı değiştirecektir.

Delete : deleteOne(filter) ve deleteMany(filter) metotları ile kullanabiliriz.

  • Ek olarak, biz gerçek hayatta data üzerinde işlem yaparken id kullanırız. Çünkü her bir data’nın id’si unique idir.
  • Örneklerde kullanılan her bir {} yukarıda bahsedilen document karşılığıdır.

Projection

Yukarıdaki gibi bir datamız olsun. Fakat bizim sadece name ihtiyacımız olsun diyelim. Projection bizi gereksiz veri almaktan kurtarır.

find({},{name : 1}) bu sorgu bize tüm datalar içinden name’leri getirir. 1’in anlamı: datayı dahil et ve bana döndür.

Embedded Documents

MongoDB document başka bir document içine yerleştirilmiş normal bir document.

Schema

  • MongoDB schema kullanımını zorunlu tutmaz fakat bu durum, hiç schema kullanmayacağımız anlamına gelmez.
  • MongoDB’ de tamamen farklı schema’lar kullanabiliriz. Schema basitçe bir document’in structure’ı diyebiliriz. Bir collection içinde birbirinden farklı schema veya structure tutabiliriz.

Yapılandırma (Structuring Data)

 

MongoDB farklı dataları tutabildiğinden bahsetmiştik. Tabloda MongoDB ve SQL yaklaşımını görüyoruz. MongoDB üç yaklaşımı da kullanabilir. SQL’de extra data olması durumunda (ortadaki durum) o datayı NULL ile tutmak zorunda. Biz MongoDB için ihtiyacımıza göre kullanabiliriz.

Veri Tipleri (Data Types)

Aynı document içinde farklı data tutabiliriz.

  • Text
  • Boolean
  • Number ->Integer32(Int32),NumberLong(int64),NumberDecimal
  • ObjectId
  • ISODate
  • Embeded document
  • Array

 ️Date ve Time Stempler shell ve drivers için farklılıklar içerir. Drivers için mongoDB sitesine göz atabilirsiniz.

MongoDB Relations

 MongoDB’deki relations(ilişkiler), farklı belgelerin birbiriyle olan ilişkilerini gösterir. Relations embeded veya reference yaklaşımlarıyla modellenebilir. İlişkiler :

  • One to one
  • One to many
  • Many to many olabilir.

Kullanıcıların adres bilgisini saklama örneğini ele alalım. Kullanıcının birden fazla adresi olabilir(one to many).

Kullanıcı document şu şekilde olsun:

{
_id:ObjectId(“62cca48dc67845f654111110”),
name: “Jack”,
contact: “432678921”,
dob: “06–06–1990”
}

Adres document şu şekilde olsun :

{
_id:ObjectId(“62cca4a5d85242602e11111”),
building: “Apt”,
pincode: 123456,
city: “New York”,
state: “New York”
}

Embeded Relations İle Modelleme

Bu yaklaşım, ilgili tüm verileri tek bir document’de tutar, bu da geri almayı ve bakımını kolaylaştırır. Embeded relation’da adres document’i kullanıcı document içerisine yerleştirilir.

  • Document tamamı tek bir sorguda alınabilir.
  • >db.users.findOne({name:”Jack”},{“address”:1})
  • Bunun dezavantajı embeded documents çok büyürse, performans düşer.

Referance Relations Modelleme

Bu yaklaşımda, hem kullanıcı hem de adres documents ayrı ayrı tutulacaktır, ancak kullanıcı documents, adres documents kimlik alanına referans verecek bir alan içerecektir .

{
   _id:ObjectId(“62cca48dc67845f654111110”),
   name: “Jack”,
   contact: “432678921”,
   dob: “06–06–1990”,
   address_ids: [
      ObjectId(“62cca4a5d85242602e11111”),
      ObjectId(“62cca4a5d85242602e11111”)
   ]
}

Yukarıda gösterildiği gibi, kullanıcı documents, karşılık gelen adreslerin Nesne Kimliklerini içeren adres_ids array alanını içerir. Bu ObjectIds’leri kullanarak adres documents sorgulayabilir ve buradan adres detaylarını alabiliriz. Bu yaklaşımla, iki sorguya ihtiyacımız olacak: birincisi adres_ids alanlarını kullanıcı belgesinden almak ve ikincisi bu adresleri adres collection’dan almak.

>var result = db.users.findOne({name:"Jack"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

youtube izlenme

Ne Düşünüyorsun?
  • 3
    harika_
    Harika!
  • 0
    g_zel_
    Güzel!
  • 0
    haval_
    Havalı!
  • 0
    e_lenceli_
    Eğlenceli!
  • 0
    _zg_n_m_
    Üzgünüm!
  • 0
    sevmedim_
    Sevmedim!

Merhaba! Ben Mina. Bilgisayar Mühendisliği 4.Sınıf öğrencisiyim. Kendimi geliştirmek ve iş hayatına hazırlamak adına eğitimler alıyor, öğrenirken yaşadığım zorlukları göz önüne alarak yazmaya özen gösteriyorum. LINKEDIN : www.linkedin.com/in/mina-odabaş-478a491b5 GITHUB : https://github.com/minaodabas YOUTUBE : https://www.youtube.com/channel/UCTXfzKGTtNJ82gwNKZFFIvA medıum : https://minaodabas.medium.com/

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir