Back to all articles
DatabaseNoSQLMongoDBBackend

MongoDB'ye Başlangıç: Yeni Başlayanlar İçin Rehber

NoSQL dünyasına adım atın. MongoDB kurulumu, temel CRUD işlemleri, veri modelleme ve performans ipuçları ile sıfırdan uzmanlığa.

MongoDB'ye Başlangıç: Yeni Başlayanlar İçin Rehber

MongoDB, modern uygulama geliştiricileri için tasarlanmış, doküman tabanlı (document-oriented) bir NoSQL veritabanıdır. Esnek şema yapısı, yatay ölçeklenebilirliği ve JSON benzeri veri formatı sayesinde günümüzün en çok tercih edilen veritabanlarından biri haline gelmiştir. Bu yazıda MongoDB'nin temellerini, kurulumdan CRUD işlemlerine kadar adım adım ele alacağız.

MongoDB Nedir?

MongoDB, verileri satır ve sütunlardan oluşan tablolar yerine, BSON (Binary JSON) formatında, esnek şemalı dokümanlar halinde saklayan bir NoSQL veritabanıdır. İlişkisel veritabanlarının aksine önceden katı bir şema tanımlamanız gerekmez; her doküman kendi alanlarına sahip olabilir.

Neden MongoDB Kullanılır?

  • Esnek şema: Dokümanlar farklı alanlara sahip olabilir, uygulama geliştikçe şema kolayca değişebilir.
  • Ölçeklenebilirlik: Sharding ile yatay olarak kolayca ölçeklenir.
  • Performans: İndeksleme ve gömülü (embedded) dokümanlar sayesinde ilişkili verilere tek sorguda erişilebilir.
  • JSON uyumluluğu: JavaScript/Node.js uygulamalarıyla doğal bir uyum sağlar.

Temel Kavramlar

MongoDB'de veriler üç seviyede organize edilir:

  • Database: Koleksiyonları barındıran en üst düzey yapı.
  • Collection: İlişkisel veritabanlarındaki tabloya benzer, dokümanları barındırır.
  • Document: BSON formatında saklanan, JSON'a benzer tek bir veri kaydı.
{
  "_id": ObjectId("651f3c2e8f1b2c3a4d5e6f7a"),
  "name": "Ertuğrul Mert",
  "role": "Self-Taught Developer",
  "skills": ["Node.js", "MongoDB", "Next.js"]
}

Kurulum

MongoDB'yi yerel makinenize kurmak için resmi paket yöneticilerini kullanabilir ya da MongoDB Atlas ile bulut üzerinde ücretsiz bir küme oluşturabilirsiniz.

# macOS (Homebrew)
brew tap mongodb/brew
brew install mongodb-community

# Ubuntu / Debian
sudo apt-get install -y mongodb-org

# Docker ile hızlı kurulum
docker run -d -p 27017:27017 --name mongodb mongo:latest

MongoDB'ye Bağlanma

Kurulumdan sonra mongosh komut satırı aracıyla veritabanına bağlanabilirsiniz:

mongosh "mongodb://localhost:27017"

Node.js tarafında ise resmi sürücüyü kullanarak bağlanabilirsiniz:

npm install mongodb
import { MongoClient } from "mongodb";

const client = new MongoClient("mongodb://localhost:27017");
await client.connect();

const db = client.db("portfolio");
const users = db.collection("users");

CRUD İşlemleri

MongoDB'de temel işlemler Create, Read, Update ve Delete olarak dörde ayrılır.

Create (Ekleme)

db.users.insertOne({
  name: "Ertuğrul Mert",
  age: 20,
  role: "Developer"
});

db.users.insertMany([
  { name: "Ertuğrul Mert", role: "Developer" },
  { name: "Utku Kösem", role: "Designer" }
]);

Read (Okuma)

// Tüm dokümanları getir
db.users.find();

// Koşula göre filtrele
db.users.find({ role: "Developer" });

// Tek bir doküman getir
db.users.findOne({ name: "Ertuğrul Mert" });

Update (Güncelleme)

db.users.updateOne(
  { name: "Ertuğrul Mert" },
  { $set: { role: "Full-Stack Developer" } }
);

db.users.updateMany(
  { role: "Developer" },
  { $inc: { age: 1 } }
);

Delete (Silme)

db.users.deleteOne({ name: "Utku Kösem" });

db.users.deleteMany({ role: "Developer" });

Sorgu Operatörleri

MongoDB, karmaşık filtreleme için zengin bir operatör kümesi sunar:

// Karşılaştırma operatörleri
db.users.find({ age: { $gt: 18 } });      // büyüktür
db.users.find({ age: { $lte: 25 } });     // küçük eşit

// Mantıksal operatörler
db.users.find({
  $or: [{ role: "Developer" }, { role: "Designer" }]
});

// Dizi içinde arama
db.users.find({ skills: { $in: ["MongoDB", "Node.js"] } });

İndeksleme

Sorgu performansını artırmak için sık kullanılan alanlara indeks eklenebilir:

db.users.createIndex({ name: 1 });        // artan sıralı indeks
db.users.createIndex({ email: 1 }, { unique: true });

Aggregation Framework

Aggregation pipeline, verileri adım adım işleyip dönüştürmenizi sağlar:

db.users.aggregate([
  { $match: { role: "Developer" } },
  { $group: { _id: "$role", total: { $sum: 1 } } },
  { $sort: { total: -1 } }
]);

Veri Modelleme: Embedding vs Referencing

İlişkili verileri modellerken iki temel yaklaşım vardır:

  • Embedding (Gömme): İlişkili veriyi aynı doküman içine gömmek. Sık birlikte okunan, küçük veriler için idealdir.
  • Referencing (Referanslama): Verileri ayrı koleksiyonlarda tutup _id ile ilişkilendirmek. Büyük veya sık güncellenen veriler için tercih edilir.
// Embedding örneği
{
  name: "Ertuğrul Mert",
  address: { city: "İstanbul", country: "Türkiye" }
}

// Referencing örneği
{
  name: "Ertuğrul Mert",
  addressId: ObjectId("651f3c2e8f1b2c3a4d5e6f7b")
}

Sonuç

MongoDB, esnek şema yapısı ve güçlü sorgu diliyle modern uygulamalar için pratik bir veritabanı çözümü sunar. Temel CRUD işlemlerini ve aggregation framework'ünü öğrendikten sonra, kendi projelerinizde rahatlıkla kullanmaya başlayabilirsiniz.