Bu yazıda bir MongoDB kullanarak basit bir uygulama geliştirmeyi göreceğiz.  NodeJS, Express, MongoDB kullanarak bir rest api oluşturacağız. MondoDB resmi dokümanlarına bu adresten erişebilirsiniz.

  • MongoDB Kurulumu
  • MongoDB’de Temel Kavramlar
  • MongoDB Konsol Erişimi
  • Uygulama Geliştirme Ortamının Oluşturulması

MongoDB Kurulumu

İlk olarak Windows bilgisayarıma MongoDB Community versiyonunu ilgili adresten indiriyorum. Kurulum tamamlandığında görsel arayüzümüzü sağlayan MongoDB Compass’ı da kurmuş oluyoruz.

Compass’dan ziyade komut satırını kullanacağız ama bir göz atalım.

Connection string olarak aşağıdaki bilgiyi girelim:

Bu erişimin sağlandığını gördükten sonra artık uygulama içerisinden erişmeyi deneyebiliriz.

Mongodb’nin kurulu olduğu klasörü envinronment variables’a ekledikten sonra komut satırından da erişebilir oluyorum.

MongoDB’de Temel Kavramlar

MongoDB collection’lar içerisinde tanımladığımız verilerimizi document’ler olarak tutmamıza imkan sağlar. Bir document aşağıdaki gibi görünür.

Document’lerimizi tutan collection’ları ize ilişkisel veritabanlarındaki tablolar gibi düşünebiliriz. Fakat bir tablodaki gibi aynı satırlara sahip olmaları gerekmiyor. Aksine collection içerisindeki document’ler farklı değerler barındıracak şekilde esnek bir yapıya sahip.

Database ise collection’ları tutan yapımız. MongoDB içerisindeki Index, Aggregation gibi daha kompleks konuları şimdilik geçiyoruz. Örn ilişkisel veritabanlarında da bulunan index sorgumuzu yaparken  performans açısından önemlidir.  Veritabanı default olarak datayı bulmak için bütün koleksiyonu tarayacaktır. İlişkisel veritabanlarında buna table scan MongoDB’de collection scan denir. Bu performans için çok kötüdür. İşte bunun yerine bir indeks kullanarak performansı arttırabiliyoruz.

Örnek bir dataset incelemek faydalı olabilir:

Örnek JSON Oluşturucu

MongoDB Console Erişimi

show dbs

show dbs komutuyla mevcut veritabanlarını görüntüleyebiliriz.

use  db

use database komutuyla hangi veritabanını kullanacağımızı seçiyoruz.

show collections

show collections komutuyla bu veritabanı içerisindeki collection’larımızı görüntülüyoruz.

db.collection.insertOne

Bir document girmek için insertOne({}) komutunu kullanabiliriz.

Ben csv dosyası olarak sample datayı aktardım.

Üzerinde bazı değişiklikler yapıyorum. Örneğin aşağıda her bir dokümana ts yani timestamp ekledik.

Bu kadar MongoDB bilgisi bu uygulama için yeterli. Şimdi uygulamanın oluşturulmasına geçiyoruz.

Uygulama Geliştirme Ortamının Oluşturulması

Aşağıdaki gibi klasörümüzü oluşturuyoruz. İçerisine bir npm ile bir proje oluşturup express ve mongoose’u kuruyoruz.

Buraya bir app.js oluşturup içerisine aşağıdaki satırları girelim.

İlk olarak az önce kurmuş olduğumuz express paketini import ediyoruz. Ardından yeni bir express instance’ı alıp app değişkenine koyuyoruz. Bu app değişkeni REST API’miz için gerekli tüm konfigürasyonu yapmamıza olanak sağlayacak. Örn route’larımızı belirleyebilecek gerekli middleware’i kurabileceğiz.

Aşağıdaki komutla sunucumuzu çalıştırabiliriz.

İşimizi kolaylaştırmak adına workflow’umuzu tanımlayacak npm scriptini giriyoruz.

Uygulamamızda ise bu node.js klasörünün yerini app.js alacak.

Bir NodeJS Projesinde Klasör ve Dosyaların Rolleri

Basit bir NodeJS projesi aşağıdaki klasör ve dosyaları içerir. Bizim projemizde de bu dosya ve klasörler yer alacak.

Github üzerinden bulduğum aşağıdaki örnek projelerden dosyaları takip edebiliriz. İlki daha basit ikincisi ise bir adım daha karmaşık.

app.js: App.js dosyası genellikle NodeJS uygulamasının ilk dosyasıdır. Aynı zamanda server.js gibi başka bir isme de sahip olabilir. Dosyanın konumu uygulamanın kök dizini olmalıdır.  node_modules klasörü npm ile kurulan kütüphanelere özeldir.

package.json: Projenin kök klasöründe bulunan package.json dosyası projeyle ilgili metadata’yı tutar. Bu dosya genellikle npm’e bilgi vermek amacıyla kullanılır. npm bu sayede projeyi tanıyabildiği gibi projenin bağımlılıklarını (dependencies) yönetir. Hem npm hem de kullanıcı için önemli olabilecek konfigürasyon bilgilerini de içerebilir.

package-lock.json: npm için önemlidir. Her paketin sahibinin yüklediği versiyonunu garanti eder.

bin: Node molüllerinin binary dosyalarının (executable) bulunduğu klasördür.

models: Bu klasör altında Model View Controller yapısındaki modeller bulunur.  Her biri bir js dosyası olacak şekilde yer alırlar.

node_modules: Projenin bağlı bulunduğu dış modülleri tutar. npm ile bu modülleri kurduğumuzda internetten download edilerek bu klasörün içerisine kopyalanırlar. Her iki örnekte de gördüğümüz üzere .gitignore içerisine adı yazılarak GitHub içerisine yüklenmesi engellenmiş.

public: Bu klasör statik dosyalar için kullanılır. İlk örnekte gördüğümüz üzere style.css dosyası buraya yerleştirilmiş.

routes: Route’lar uygulamanın kullanıcıdan gelen requeste nasıl cevap vereceğini tanımlar.

views: Bu örnekte view’ler Pug dosyalarından oluşuyor.  (eski adıyla jade) Pug basit bir template engine’dir.

Aşağıda index.pug view’ini görüyoruz.

Umarım faydalı olmuştur. Bir başka yazıda görüşmek dileğiyle…