Mongoose Hızlı Başlangıç

Mongoose JS Nedir ve Nasıl Kullanılır? Hızlı Başlangıç Rehberi

Bir çok programa veriler üzerine işlem yapar. Yeni veri eklenir, sililir, düzenlenir veya veri içerisinde bazı bilgiler aranır. Bu nedenle de veri tabanları kullanılır. Günümüzde çok sayıda veritabanı geliştirilmiştir. Veri tabanları çalışma prensiplerine göre SQL veya NoSQL gibi farklı sınıflara ayrılırlar. Konumuz şuan için veri tabanları olmadığı için detaylara girmiyoruz. Bununla birlikte MongoDB ise gününümüzde çok popüler olan bir NoSQL veri tabanı. C++ ile yazılmış ve çok sayıda programlama dili ile kullanılabilabiliyor.

MongoDB NodeJS ile de kullanılabilir. Node JS ile bir uygulama geliştirirken bunu MongoDB arayüzü üzerinden yapabiliriz. Bu kendi açısından farklı faydalar sağlayan bir yöntem olur. Fakat bunu kolaylaştıracak çok popüler bir araç var da bulunuyor, Mongoose.

Mongoose Nedir?

Mongoose asenkron bir ortamda çalışmak üzere tasarlanmış, MongoDB nesne modelleme aracıdır. Uygulama verilerini modellemek için basit, şeme tabanlı bir çözüm sunar. Veri tipi tanımlama, veri doğrulama, sorgu oluşturma gibi işlemlerin kolayca yapılmasını sağlar.

Mongoose bir nesne veri modeli (ODM) aracıdır. Verileri nesneye çevirmek ve onlar üzerinde işlem yapmak için kullanılır. Böylece veritabanından soyutlanmış bir şekilde belge üzerinde işlemlerin rahatlıkla yapılmasını sağlar.

Bir veri oluşturursunuz, üzerinde işlem yaparsınız ve kayıt edersiniz. Bunun veritbanı işlemlerini Mongoose programcı yerine kendisi yapar.

Mongoose Kullanmanın Faydaları Nedir?

Her geliştirilen teknoloji gibi mongoose da kendi faydaları ile birlikte gelir. Bunlardan bazılarını sayacak olursak.

  • Şema Kullanımı: MongoDB şemasız bir NoSQL veritabanıdır. Verileri istediğiniz formatta girebilirsiniz. Bu bir esneklik olsa da bazı durumda veri bütünlüğünü sağlamayı zorlaştırır. Mongoose verileri kullanırken önceden bir şema tanımlar ve bu nedenle veriler ile çalışmayı kolaylaştırır.
  • Doğrulma: Mongoose şema üzerinde doğrulama tanımlamalarını yapmanıza olanak verir. Bu sayede mesela bir alanın gerekli olduğunu belirtmek için require: true diyebilirsiniz. Aksi halde bu doğrulama işlemleri ile alakalı kodları yazılımcının yapması gerekecektir.
  • Oluturma Zamanı İşlemler: Mongoose ile bir veri oluşturmadan önce veya sonrasında yapmanız gereken işlemleri kolaylıkla tanımlayabilirsiniz. Mesela bir şehir bilgisi oluşturulmadan önce onunla ilgili farklı verilerin alınması gerekiyorsa, veya şehir isminin doğrulanması gerekiyorsa bunun ile ilgili doğrulama kodunu yazarak bu işlemleri oluşturma zamanında kolayca yazılabilir.
  • Güncellenen Nesneyi Dönderme: Mongoose ile bir işlem yaptığınızda, işlemin yapıldığı belge ve ile ilgili bilgiler bir nesne ile geri dönderir. Böylece güncellenen nesne ile ilgili bilgilere kolaylıkla ulaşılabilir.

Terminoloji

Mongoose ile çalışmadan önce bazı terimlerin bilinmesinde fayda bulunuyor. Böylelikle yapılacak işlemlerin anlaşılması kolaylaşıyor.

Koleksiyon ( Collections )

Koleksiyonlar SQL’de kullanılan tablolar ile aynı görevi görürler. Belirli bir alandaki verileri bir arada tutmak için kullanılırlar.

Belge ( Documents )

Belirli bir bilgi kümesinin tutulduğu alanlardır. Bu SQL’deki bir kayıt satırı ile aynı işlevi görür. Mesela bir müşteri bilgilerinin tutulduğu alandır ve içerisinde müşteri ile ilgili bilgiler vardır.

Alanlar ( Fields )

Bir belge içerisinde tutulan verilerden herbirine verilen isimdir. Mesela bir müşteri belgesi içerisindeki isim gibi. SQL’deki bir tablo içerisindeki kolonlar gibi düşünülebilir.

Şema (Schema)

MongoDB şemasız bir yapıya sahiptir. SQL gibi bir kesin bir yapı talep etmez. Bundan daha önce bahsettik. Veriler ile kolay çalışmak için mongose bir şema tarifi yapılmasını sağlar ve böylece veriler bellirli bir düzen içerisinde tutulabilir. Şema bir belge tanımıdır.

Model

Şemalar bir verinin tarifini yaparlar, model ise veritabanındaki karşılığının yüksek seviyeli bir karşılığıdır.

Hızlı Başlangıç – Mongoose Kullanımı

Şimdi mongoose kullanmaya hızlı bir başlangıç yapalım ve nasıl kullanacağımızı görelim.

Kurulum

Mongoose Node tabanlı çalıştığı için sistemde NodeJS kurulu olmalıdır. Yine MongoDB kullandığı için sisteminizde MongoDB kurulu olmalıdır, yada MongoDB kullanabileceğiniz bir servis de kullanabilirsiniz.

Öncelikle projeniz için boş bir klasör oluşturun. Sonrasında projenize mongoose kütüphanesini kurmak için öncelikle bir terminal açınız ve terminal içerisinde çalışma projenizin olduğu dizine gidiniz. Terminal ekrandan ilk olarak

npm init -y

komutunu çalıştırarak bir proje oluşturun. Sonrasında mongoose kütüphanesini projenize kurmak için

npm i mongoose

komutunu çalıştırınız. İnternet bağlantınıza bağlı olarak bir süre içerisinde mongoose kütüphanesi projenize eklenecektir.

Mongoose Kullanımı

Kütüphanemizi kurduğumuza göre artık mongodb bağlantısını yaparak, mongoose kullanımına başlayalım.

MongoDB Bağlantısı

Mongoose kullanmak için ilk olarak MongoDB bağlantısı yapmak gereklidir. Eğer kullandığınız servis bir şifre veya özel bir url bilgisi istiyorsa bu bilgilere sahip olmanız gerekir. Test amaçlı bilgisayarınıza MongoDB kurduğunuzu varsayarak ilerliyoruz. Localhost üzerinde şifre gerektirmeyen bir işlem yapacağız. İlk olarak proje dizini içersinde index.js adında bir dosya oluşturalım.

Sonrasında mongose kütüphanesini import edelim.

const mongoose = require('mongoose');

Artık mongose bağlanmak için hazırız. Mongoose bağlanmak için connect metodu kullanılır. Bu metod bağlanacak servisini adres bilgisini bir parametre olarak alır. Adres bilgisinin sonundaki test olarak verilen bilgi bağlanılacak olan koleksiyonun (collection) adıdır ve eğer yoksa ilk işlem yapıldığında oluşturulur.

mongoose.connect('mongodb://localhost:27017/test');

Eğer bir sorun yoksa artık mongoose üzerinde mongodb bağlantısı sağlanmış oldu.

Schema Oluşturma

Bağlantıyı yaptıktan sonra ilk olarak bir şema oluşturmamız gerekiyor. Bunun için mongoose.Schema metodu kullanılıyor. Şimdi bir müşteri şeması oluşturalım ve onun üzerinden devam edelim. Müşteri şeması olarak isim (name), şehir (city) ve yaş (age) alanlarını içerir ve name ile city string (metin) age ise number (sayı) olarak belirtiyoruz.

const customerSchema = mongoose.Schema({
    name: String,
    city: String,
    age: Number
});

Model Oluşturma

Şemamızı oluşturduktan sonra bunu bir modele çevirerek MongoDB üzerine taşımamız gerekiyor. Bunun için mongose.model metodunu kullanıyoruz. Bu metod parametre olarak model adını ve model için kullanılan şemayı alır.

const Customer = mongoose.model('customer', customerSchema);

Veri Oluşturma

Artık modelimizi de oluşturduğumuza göre verilerimizi girmeye başlayabiliriz. Bir veri oluşturmak için yapmamız gereken modelimizin yeni bir örneğini oluşturmak.

const customer = new Customer({
    name: 'Ahmet Koşan',
    city: 'Kocaeli',
    age: 35
});

Artık yeni bir müşterimiz var ve bu müşteri bilgilerini customer nesnesi üzerinde tutuyoruz. Müşteri adını konsola yazdırmak için

console.log(customer.name);

komutu yeterli olacaktır. Nesnemiz üzerinde istediğimiz gibi işlem yapabiliriz. Çünkü o bir JavaScript nesnesi.

Verileri Kaydetme

Nesnemizi oluşturduk, üzerinde işlemler yaptık fakat bunları veritabanına kaydetmedik. Bu nedenle oluşturduğumuz nesne sadece uygulamamız içerisinde görünür olacaktır. Şimdi bu nesnemizi MongoDB üzerine kayıt edelim. Bunun için modelimizin save metodunu kullanacağız.

customer.save();

Bu kadar basit artık nesnemiz veritabanına eklendi. İstediğimiz kadar nesne oluşturarak veritabanımıza ekleyebiliriz.

const customer1 = new Customer({
    name: 'Hakan Yılmaz',
    city: 'İstanbul',
    age: 39
});
customer1.save();

Arama Yapma

Veritabanımızdaki verilere ulaşmak için findfindOnefindById gibi metodları kullanabiliriz. Tüm kayıtları almak için find metodunu kullanacağız. Asenkron bir metod olduğu için bunu bir promise yapısı içerisinde kullanalım.

Customer.find().then(data => console.log(data));

şeklinde find metodunu kullanabiliriz. Bu şekilde tüm nesneleri alabiliriz. Fakat burada dikkat edilmesi gereken find metodu asenkrondur ve bu nedenle de async – await içerisinde kullanılmalıdır. Yada bir then – catch olarak.

Verileri ekrana yazdırdığımızda bir dizi içerisinde oluşturduğumuz nesneleri (müşteri) göreceksiniz. Yine ayrıca her kayıta _id benzersiz bir ID değeri MongoDB tarafından verilecektir. Çıktı olarak

[
  {
    _id: new ObjectId("636232f92a0c3dc7065b18c3"),
    name: 'Ahmet Koşan',
    city: 'Kocaeli',
    age: 35,
    __v: 0
  },
  {
    _id: new ObjectId("636232f92a0c3dc7065b18c4"),
    name: 'Hakan Yılmaz',
    city: 'İstanbul',
    age: 39,
    __v: 0
  }
  ]

index.js dosyası içeriği aşağıdaki gibi olacaktır.

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');

const customerSchema = mongoose.Schema({
    name: String,
    city: String,
    age: Number
});

const Customer = mongoose.model('customer', customerSchema);

const customer = new Customer({
    name: 'Ahmet Koşan',
    city: 'Kocaeli',
    age: 35
})

console.log(customer.name)

customer.save();

const customer1 = new Customer({
    name: 'Hakan Yılmaz',
    city: 'İstanbul',
    age: 39
});
customer1.save();

Customer.find().then(data => console.log(data));

Yine kodları çalıştırmak için terminal içerisinde

node index

yazarak çalıştırmak yeterli olacaktır. Herhangi bir sorun olmadığı takdirde kodunuz çalışacaktır.

NOT : Asenkron bir işlem olduğu için tüm veriler çıktı olarak hemen gelmeyebilir. Sadece bir müşteri veya boş bir dizi ile karşılaşabilirsiniz. Bunun için uygulamayı durdurarak tekrar çalıştırmanız gerekebilir.

NOT : Uygulamayı tekrar tekrar çalıştırdığınızda aynı kayıtların tekrarlandığını göreceksiniz. Çünkü MongoDB her girdiye farklı bir ID vererek yeni bir kayıt oluşturuyor. Biz bu uygulamamızda bunu denetlemediğimizde mükerrer kayıtlar olacaktır.

Sonuç

Mongoose bir JavaScript nesnesi üzerinde çalışıyor gibi MongoDB üzerinde çalışmamızı sağlayan bir kütüphane. Programcıya bir çok fayda sağlıyor. Veriyi oluşturmak, düzenlemek veya kayıt etmek gibi işlemleri halletmemizi kolaylaştırdığı gibi şema (schema) kullandığı için MongoDB üzerinde belirli bir düzende kayıtlar oluşturma ve bu kayıtlarda onay (valitation) işlemlerini sağlaması açısında oldukça faydalı bir kütüphanedir.

Yorum bırakın

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