İçeriğe geç

NoSQL veritabanı MongoDB

Oldukça popüler bir NoSQL database türü olan MongoDB nedir, özellikleri nelerdir gibi konularda kısaca bahsederek Javascript istemcisi üzerinde bir MongoDB örneği yaparak konuyu pekiştirmeye çalışalım.

MongoDB Nedir?

MongoDB, cross-platform, açık kaynaklı ve döküman tabanlı bir database yönetim sistemidir. Bir NoSQL database türüdür. Döküman tabanlı dedim çünkü bünyesinde ilişkisel bir tablo yapısı barındırmaz. Kullandığı data yapısı JSON’a çok benzer olmasına karşın BSON adı verilen bir data yapısını kullanır. BSON, Binary JSON manasına gelir.

MongoDB Özellikleri

  • Kullanımı ücretsizdir.
  • Döküman odaklı: MongoDB, NoSQL bir veritabanı olduğundan dolayı verileri döküman formatında saklar. Bu durum herhangi bir standart veri formatına bağımlı olmamasından dolayı esneklik ve kolaylık sağlar.
  • Sorgulama esnekliği: Bir alana (field) göre, belli aralıklara göre veya regular expression (regex) kullanılarak arama yapılabilmesine olanak tanır. Yapılan aramalarda sadece istenilen field’ların döndürülebilmesi sağlanabilir.
  • Indexleme: Database sistemlerinde kuşkusuz performans noktasında en önemli sayılabilecek noktalardan biri indexleme özelliğidir. Bu özellik sayesinde daha hızlı sorgu sonuçları alınabilir. MongoDB’de, istenilen herhangi bir field’a göre indexleme yapılabilmektedir.
  • Replikasyon: Replika setleriyle birden fazla MongoDB instance’ı oluşturmaya izin vererek yüksek kullanılabilirlik sağlar.
  • Load balancing:Birden fazla MongoDB instance’ı arasında yatay ölçekleme yapabildiği için herhangi bir donanım arızası olduğunda aktif olan instance üzerinden çalışabilir.

Programlama dili bağımsız diyebileceğimiz nitelikle resmi olarak 10+ dilde sürücüsü bulunuyor. Ayrıca topluluğun katkılarıyla daha fazlası geliştirilmekte.

Şimdi gelin kısa bir başlangıç yaparak, MongoDB’nin kullanımının ne kadar kolay olduğuna bakalım.

Öncelik hali hazırda çalışan bir MongoDB sunucumuz olması gerekiyor. Yok ise kendi lokalimizde bir sunucu başlatabiliriz. Lokal bir MongoDB sunucusu kurmak için şu adımları izleyebilirsiniz.

MongoDB Sunucusu Oluşturma

Öncelikle MongoDB yükleme adımlarının tamamını Install MongoDB sayfasından bulabileceğinizi söyleyeyim. Ben size burada Windows için kısa kurulum adımlarından bahsedeceğim.

  • Öncelikle MongoDB Community Server bağlantısnı kullanarak MSI paketini indirip kurulumu tamamlayın. Varsayılan olarak C:\Program Files\MongoDB adresine kurulumu yapacaktır.
  • Database dosyalarının konumunu belirlemek için bir klasör oluşturun. Ben C: sürücüsü içerisine mongodata\db klasörü oluşturdum.
  • Sonrasında CMD üzerinde aşağıdaki şekilde mongod prosesini çalıştırarak sunucuyu ayağa kaldırmış olacağız.
"C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --dbpath="C:\mongodata\db"

Eğer ekranda döküm şeklinde bilgiler geldiyse, içerisinde error veya exception şeklinde bir ibare yoksa, bu adımı da başarıyla tamamlamış ve lokal MongoDB sunucusunu aktif hale getirmişiz demektir. Şimdi bu sunucuyu nasıl kullanacağımıza bakalım.

MongoDB Nasıl Kullanılır?

Uygulamamızı Node.js kullanarak yapacağız, eğer bu konuda bilginiz yoksa daha önce anlattığım Node.js Projesi Oluşturma yazıma bakabilirsiniz.

Driver olarak bir çok alternatif var lakin bu örneğimizde resmi driver olan npm üzerindeki mongodb paketini kullanalım.

Aşağıdaki şekilde mongodb paketini node.js projemize ekleyerek başlayabiliriz.

npm install mongodb --save

Bu işlem sonrası javascript dosyası üzerinde bu paketi kullanabiliriz. Şimdi aşağıdaki kodları bir dosyaya yazalım. Ben index.js dosyası oluşturarak içerisine ekledim.

// MongoDB Client oluşturma
const MongoClient = require('mongodb').MongoClient; 

// MongoDB sunucu adresi
const mongoDbServer = 'mongodb://127.0.0.1:27017';

// Database adı
const dbName = 'hellomongo';

// Sunucuya bağlanma
MongoClient.connect(mongoDbServer, function(err, client) {
    if(err) throw err;
    const db = client.db(dbName);

    console.log("Bağlantı başarıyla kuruldu"); 

    client.close();
});

Burada mongodb server adresi olarak lokali gösterdim. Lokale kurulum yapıldığında varsayılan olarak bu IP ve portta sunucu çalıştırılmaktadır.

Database adı olarak istediğim bir isim verdim. Buradaki nokta eğer bu isimde bir database varsa onu kullanacak, eğer yoksa yeni bir database oluşturacaktır.

Aşağıdaki komutla konsol üzerinden index.js dosyasını çalıştırıyorum.

node index.js

Eğer konsol ekranında “Bağlantı başarıyla kuruldu” ibaresini görüyorsak sorunsuz olarak database’e bağlandık demektir. Sonraki aşamada insert/update/delete işlemlerini yapalım.

Fazla kod kalabalığı olmaması için önce ekleme/güncelleme/silme ve arama fonksiyonlarını yazalım. Sonrasında kullanımlarına göz atabiliriz.

Ekleme İşlemi / Insert

Döküman ekleme işlemleri için aşağıdaki şekilde bir insert fonksiyonu oluşturalım.

const insertDocuments = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Koleksiyona çoklu ekleme işlemi
	collection.insertMany([
		{ id: 1, adi: 'Ahmet', soyadi: 'Çınar', yas: 25 },
		{ id: 2, adi: 'Caner', soyadi: 'Sarı', yas: 30 },
		{ id: 3, adi: 'Gülçin', soyadi: 'Yılmaz', yas: 22 }
	], function(err, result) {
		if(err) throw err;
		
		console.log("Koleksiyona 3 döküman eklenmiştir.");
		
		callback(result);
	});
};

Güncelleme İşlemi / Update

Döküman güncellemek için aşağıdaki update fonksiyonu kullanılabilir. Id alanı 1 olan kullanıcının yas fieldını güncellemeye çalışıyoruz.

const updateDocument = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// İlk parametre ile güncellenecek kayıt bulunur, sonra istenilen field'ı güncellenir.
	collection.updateOne({ id: 1 }, { $set: { yas: 26 }},
	function(err, result) {
		if(err) throw err;
		
		console.log("1 Id'li kaydın yaşı güncellenmiştir.");
		
		callback(result);
	});
};

Silme İşlemi / Delete

Döküman silme işlemini aşağıdaki şekilde deleteOne metoduyla yapıyoruz. Biz bu örnekte Id değeri 2 olan kaydı silmeye çalışıyoruz.

const deleteDocument = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Silme işlemi id alanı üzerinden yapılır
	collection.deleteOne({ id: 2 }, function(err, result) {
		if(err) throw err;
		
		console.log("Id'si 2 olan kayıt silinmiştir.");
		
		callback(result);
	});
};

Arama İşlemi / Search

MongoDB’de arama işlemini find metoduyla yapıyoruz. Biz aşağıdaki örnekte çok fazla kaydımız olmadığı için tümünü listeledik.

const findDocuments = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Id'si 3 olan kayıtı arama işlemi için: collection.find({ id: 3})
	// Tüm kayıtları listelemek: collection.find({}) şeklinde kullanabilirsiniz.
	collection.find({}).toArray(function(err, docs) {
		if(err) throw err;
		
		console.log("Şu kayıtlar bulunmuştur;");
		
		console.log(docs);
		
		callback(docs);
	});
};

Şimdi gelin bu CRUD (Create, Read, Update, Delete) fonksiyonlarını, yazının en başında gördüğümüz connection kodlarıyla birleştirelim. Öncelikle MongoDB connection’ı kuracağız ve sonrasında CRUD işlemlerini yapacağız.

Fonksiyon kullanımlarını aşağıdaki şekilde yapabiliriz. Yaptığımız iş connect metodu üzerinden bize gelen client objesi ile db ‘ye ulaşmak. Sonrasında bu db objesini CRUD metodlarına ileterek ilgili kodları çalıştırmaktır.

const MongoClient = require('mongodb').MongoClient; 

// MongoDB sunucu adresi
const mongoDbServer = 'mongodb://127.0.0.1:27017';

// Database adı
const dbName = 'hellomongo';

// Sunucuya bağlanma
MongoClient.connect(mongoDbServer, function(err, client) {
    if(err) throw err;
	
    const db = client.db(dbName);
	
	insertDocuments(db, function() {
		client.close();
	});
});

Yukarıdaki örnekte sadece ekleme işlemi yapılmaktadır. Şimdi gelin tüm metodları birleştirerek hepsini çalıştırma yöntemine bakalım. Aslında aynı kodları tekrar tekrar buraya yazmak istemesem de, kod bloğunun çalışır durumda olması benim için önemli.

Aşağıda index.js dosyasının son halini görebilirsiniz. Node.js dosyalarını çalıştırdığımız gibi bu dosyayı da konsola şunu yazarak çalıştırabilirsiniz. node index.js

// Create / Insert
const insertDocuments = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Koleksiyona çoklu ekleme işlemi
	collection.insertMany([
		{ id: 1, adi: 'Ahmet', soyadi: 'Çınar', yas: 25 },
		{ id: 2, adi: 'Caner', soyadi: 'Sarı', yas: 30 },
		{ id: 3, adi: 'Gülçin', soyadi: 'Yılmaz', yas: 22 }
	], function(err, result) {
		if(err) throw err;
		
		console.log("Koleksiyona 3 döküman eklenmiştir.");
		
		callback(result);
	});
};

// Read / Search
const findDocuments = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Id'si 3 olan kayıtı arama işlemi için: collection.find({ id: 3})
	// Tüm kayıtları listelemek: collection.find({}) şeklinde kullanabilirsiniz.
	collection.find({}).toArray(function(err, docs) {
		if(err) throw err;
		
		console.log("Şu kayıtlar bulunmuştur;");
		
		console.log(docs);
		
		callback(docs);
	});
};

// Update
const updateDocument = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// İlk parametre ile güncellenecek kayıt bulunur, sonra istenilen field'ı güncellenir.
	collection.updateOne({ id: 1 }, { $set: { yas: 26 }},
	function(err, result) {
		if(err) throw err;
		
		console.log("1 Id'li kaydın yaşı güncellenmiştir.");
		
		callback(result);
	});
};

// Delete
const deleteDocument = function(db, callback) {
	// Koleksiyon, db objesinden alınır
	const collection = db.collection('employees');
	
	// Silme işlemi id alanı üzerinden yapılır
	collection.deleteOne({ id: 2 }, function(err, result) {
		if(err) throw err;
		
		console.log("Id'si 2 olan kayıt silinmiştir.");
		
		callback(result);
	});
};

// MongoDB Client oluşturma
const MongoClient = require('mongodb').MongoClient; 

// MongoDB sunucu adresi
const mongoDbServer = 'mongodb://127.0.0.1:27017';

// Database adı
const dbName = 'hellomongo';

// Sunucuya bağlanma
MongoClient.connect(mongoDbServer, function(err, client) {
    if(err) throw err;
	
    const db = client.db(dbName);

    console.log("Bağlantı başarıyla kuruldu");  
	
	insertDocuments(db, function() {
		updateDocument(db, function() {
			deleteDocument(db, function() {
				findDocuments(db, function() {
					client.close();
				});
			});
		});
	});
});

Bu örneklerle beraber Node.js üzerinde MongoDB nasıl kullanılır bunu öğrenmiş olduk. Normal şartlarda Mongo shell üzerinde konsol penceresinden de bu işlemleri yapabilirsiniz. Siz de kullandığınız programlama diline uygun olan driver’ı kullanarak bir alıştırma yapabilirsiniz. Hoşça kalın 🙂

İlk Yorumu Siz Yapın

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir