Bu gönderi bilgisayar kullanmayı bilen, okuduğunu anlayan, tercihen JavaScript bilgisi olan web programcılarına yöneliktir.

MongoDB benim gözümde en iyi veritabanı sistemidir. Cross-platform, doküman bazlı NoSQL bir veritabanıdır. Girdiler JSON benzeri dokümanlarla tutulur. Ben büyük bir sosyal medya platformunu da MongoDB veritabanı kullanarak yarattım.

Buradan indir.


Windows'a kuruyorsan MongoDB Compass'ı da kur. Debian tabanlı bir GNU/Linux sisteme kuruyorsan APT'den mongodb-org paketini indireceksin zaten.

Compass şu oluyor. Local veya uzaktaki sunucuya bağlanabiliyorsun. Uzak sunucuya bağlanıyorsanız şifrelemeyi ve SSL kullanmayı unutmayın yoksa zortlarsınız. Ben yerelde Windows sunucularda Linux kullanıyorum. Aralarında doküman alışverişi de yapabiliyorlar zaten.

1722241671608.webp


Bunların çok detayına girmeyeceğim sadece Express.JS altında mongodb paketini kullanarak nasıl utilize ediliğini göstereceğim küçük küçük snippetler ile. Mongoose diye paket de var, şema desteği falan var ama o bebekler için. Onun konusunu da başkası açsın.

[CODE lang="javascript" title="Bağlantı Kurmak"]const { MongoClient } = require('mongodb');

// Bağlantı URL'i. Buna kullanıcı adı şifre de yazıyorsun eğer sunucudaysan ama yani onun için de git doküman oku.
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

// Veritabanı adı. Şu Compass ekran görüntüsünde soldaki şeyler ayrı ayrı veritabanları oluyor.
const dbName = 'myDatabase';

async function connect() {
try {
await client.connect();
console.log('Bağlandık knk.');
const db = client.db(dbName);
return db;
} catch (err) {
console.error(err);
}
}

connect();[/CODE]

Bağlantı bu şekilde kuruyoruz. Bunu ayrı bir modüle, onu da bir middleware'e bağlarsanız, her routeunuzda yani endpointinizde veritabanınıza erişebilirsiniz. En azından benim yoğurt yiyişim öyle. Sizin öyle değilse yorumlarda küfür edin :D

Bir doküman eklemek.
JavaScript:
const collection = db.collection('documents');
await collection.insertOne({ name: 'Recep', age: 37 });

1722242325235.webp



Gördüğünüz gibi "myDatabase" isimli veritabanında "documents" isimli koleksiyona bir obje ekledim. Ekleyebildiğiniz tüm veri tiplerini şöyle göstereyim.
1722242383319.webp


Birden fazla doküman eklemek.

JavaScript:
await collection.insertMany([{ name: 'Recep', age: 37 }, { name: 'Yonga', age: 23 }]);

Bir dokümanı bulmak ve döndürmek.

JavaScript:
const document = await collection.findOne({ name: 'Recep' });

document değişkeninin değeri:
JSON:
{
  _id: new ObjectId('66a754e4ed8c6e6be2403985'),
  name: 'Recep',
  age: 37
}

Birden fazla doküman bulmak.
JavaScript:
await collection.find({ age: { $gte: 25 } }).toArray();

gte operatörü Greater Than demek. Eğer bunun "büyükse" anlamına geldiğini benden şu an öğreniyorsanız mesleği bırakın ve İngilizce çalışmaya başlayın. 25 yaşından büyükleri döndürecek bu. findOne yerine find yapıyoruz ki birden fazla doküman arasın. Bir de .toArray() methodunu da kullanıyoruz ki arraye çevirsin. Diğer operatörler ve daha fazlası dokümanda yer alıyor. Bunlar sadece başlangıç snippetleri olacak.

Var olan dokümanı güncellemek.

JavaScript:
await collection.updateOne({ name: 'Recep' }, { $set: { age: 90 } });
Recep isimli dokümanı bulup age değerini 90 yaptı güncelledi yuppi :D

MongoDB dokümanları atomiktir. 🤓☝ Yani hocam bu ne demek oluyor? İşlemler aynı anda da yapılsa, aynı doküman aynı anda da güncellense bunlar hem sıraya alınır hem de bir dokümanın farklı yerlerini güncelleyebilirsiniz. MongoDB motoru buna izin verir.

Birden fazla dokümanı aynı anda güncellemek.

JavaScript:
await collection.updateMany({ age: { $gte: 25 } }, { $set: { status: 'active' } });

Yaşı 25'den büyük olanlara status: active diye bir girdi ekledi.

Bir dokümandaki array'e yeni değer pushlamak. Burada hobbies bir array yani.

JavaScript:
await collection.updateOne({ name: 'Recep' }, { $push: { hobbies: 'reading' } });

1722243405675.webp


Doküman silmek :(

JavaScript:
await collection.deleteOne({ name: 'Yonga' });

Birden fazla doküman silmek.

JavaScript:
await collection.deleteMany({ age: { $lt: 28 } });

Yaşı 28'den küçük olanları siliyor. lt = lower than.


Bilerek kısa tuttum. Yoksa daha indexler, aggregationlar, bulup değiştirmeler, bulup modifiye etmeler, toplu yazım işlemleri, sayım işlemleri ve daha niceleri var.
Tabii yeni başlayanlar için de değil bu post. Ama siz yine de sorularınız olursa çekinmeden sorun.

Öğrenmek istiyorum hocam:
 
Bu gönderi bilgisayar kullanmayı bilen, okuduğunu anlayan, tercihen JavaScript bilgisi olan web programcılarına yöneliktir.

MongoDB benim gözümde en iyi veritabanı sistemidir. Cross-platform, doküman bazlı NoSQL bir veritabanıdır. Girdiler JSON benzeri dokümanlarla tutulur. Ben büyük bir sosyal medya platformunu da MongoDB veritabanı kullanarak yarattım.

Buradan indir.


Windows'a kuruyorsan MongoDB Compass'ı da kur. Debian tabanlı bir GNU/Linux sisteme kuruyorsan APT'den mongodb-org paketini indireceksin zaten.

Compass şu oluyor. Local veya uzaktaki sunucuya bağlanabiliyorsun. Uzak sunucuya bağlanıyorsanız şifrelemeyi ve SSL kullanmayı unutmayın yoksa zortlarsınız. Ben yerelde Windows sunucularda Linux kullanıyorum. Aralarında doküman alışverişi de yapabiliyorlar zaten.

Eki Görüntüle 69641

Bunların çok detayına girmeyeceğim sadece Express.JS altında mongodb paketini kullanarak nasıl utilize ediliğini göstereceğim küçük küçük snippetler ile. Mongoose diye paket de var, şema desteği falan var ama o bebekler için. Onun konusunu da başkası açsın.

[CODE lang="javascript" title="Bağlantı Kurmak"]const { MongoClient } = require('mongodb');

// Bağlantı URL'i. Buna kullanıcı adı şifre de yazıyorsun eğer sunucudaysan ama yani onun için de git doküman oku.
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

// Veritabanı adı. Şu Compass ekran görüntüsünde soldaki şeyler ayrı ayrı veritabanları oluyor.
const dbName = 'myDatabase';

async function connect() {
try {
await client.connect();
console.log('Bağlandık knk.');
const db = client.db(dbName);
return db;
} catch (err) {
console.error(err);
}
}

connect();[/CODE]

Bağlantı bu şekilde kuruyoruz. Bunu ayrı bir modüle, onu da bir middleware'e bağlarsanız, her routeunuzda yani endpointinizde veritabanınıza erişebilirsiniz. En azından benim yoğurt yiyişim öyle. Sizin öyle değilse yorumlarda küfür edin :D

Bir doküman eklemek.
JavaScript:
const collection = db.collection('documents');
await collection.insertOne({ name: 'Recep', age: 37 });

Eki Görüntüle 69650


Gördüğünüz gibi "myDatabase" isimli veritabanında "documents" isimli koleksiyona bir obje ekledim. Ekleyebildiğiniz tüm veri tiplerini şöyle göstereyim.
Eki Görüntüle 69651

Birden fazla doküman eklemek.

JavaScript:
await collection.insertMany([{ name: 'Recep', age: 37 }, { name: 'Yonga', age: 23 }]);

Bir dokümanı bulmak ve döndürmek.

JavaScript:
const document = await collection.findOne({ name: 'Recep' });

document değişkeninin değeri:
JSON:
{
  _id: new ObjectId('66a754e4ed8c6e6be2403985'),
  name: 'Recep',
  age: 37
}

Birden fazla doküman bulmak.
JavaScript:
await collection.find({ age: { $gte: 25 } }).toArray();

gte operatörü Greater Than demek. Eğer bunun "büyükse" anlamına geldiğini benden şu an öğreniyorsanız mesleği bırakın ve İngilizce çalışmaya başlayın. 25 yaşından büyükleri döndürecek bu. findOne yerine find yapıyoruz ki birden fazla doküman arasın. Bir de .toArray() methodunu da kullanıyoruz ki arraye çevirsin. Diğer operatörler ve daha fazlası dokümanda yer alıyor. Bunlar sadece başlangıç snippetleri olacak.

Var olan dokümanı güncellemek.

JavaScript:
await collection.updateOne({ name: 'Recep' }, { $set: { age: 90 } });
Recep isimli dokümanı bulup age değerini 90 yaptı güncelledi yuppi :D

MongoDB dokümanları atomiktir. 🤓☝ Yani hocam bu ne demek oluyor? İşlemler aynı anda da yapılsa, aynı doküman aynı anda da güncellense bunlar hem sıraya alınır hem de bir dokümanın farklı yerlerini güncelleyebilirsiniz. MongoDB motoru buna izin verir.

Birden fazla dokümanı aynı anda güncellemek.

JavaScript:
await collection.updateMany({ age: { $gte: 25 } }, { $set: { status: 'active' } });

Yaşı 25'den büyük olanlara status: active diye bir girdi ekledi.

Bir dokümandaki array'e yeni değer pushlamak. Burada hobbies bir array yani.

JavaScript:
await collection.updateOne({ name: 'Recep' }, { $push: { hobbies: 'reading' } });

Eki Görüntüle 69661

Doküman silmek :(

JavaScript:
await collection.deleteOne({ name: 'Yonga' });

Birden fazla doküman silmek.

JavaScript:
await collection.deleteMany({ age: { $lt: 28 } });

Yaşı 28'den küçük olanları siliyor. lt = lower than.


Bilerek kısa tuttum. Yoksa daha indexler, aggregationlar, bulup değiştirmeler, bulup modifiye etmeler, toplu yazım işlemleri, sayım işlemleri ve daha niceleri var.
Tabii yeni başlayanlar için de değil bu post. Ama siz yine de sorularınız olursa çekinmeden sorun.

Öğrenmek istiyorum hocam:

Buralar yazılım kokmuş :D
Elinize sağlık hocam bizim için yabancı dil niteliğinde rehber :)