Giriş
Mongoose, MongoDB için JavaScript tabanlı bir ODM (Object Document Mapping) aracıdır. Gelişmiş özellikleri arasında sanal alanlar ve metodlar, veritabanı işlemlerini daha esnek ve güçlü hale getirir. Bu makalede, Mongoose’da sanal alanların ve metodların nasıl kullanılacağı, bu özelliklerin avantajları ve pratik uygulamaları üzerinde durulacağız.
Sanal Alanlar (Virtuals)
Sanal alanlar, Mongoose şemalarında gerçek veritabanı alanları olmayıp, model üzerinde dinamik olarak oluşturulan alanlardır.
Sanal Alanların Tanımlanması
Sanal alanlar, .virtual()
metodunu kullanarak tanımlanır ve genellikle hesaplanmış değerler içerir.
const userSchema = new mongoose.Schema({
firstName: String,
lastName: String
});
userSchema.virtual('fullName').get(function() {
return `${this.firstName} ${this.lastName}`;
});
Sanal Alanların Kullanımı
Bir kez tanımlandıktan sonra, sanal alanlar normal bir doküman alanı gibi kullanılabilir.
const user = new User({
firstName: 'Ahmet',
lastName: 'Yılmaz'
});
console.log(user.fullName); // "Ahmet Yılmaz"
Metodlar
Mongoose şemalarına eklenen metodlar, belirli işlemleri gerçekleştirmek için kullanılır.
Doküman Metodları Ekleme
Doküman metodları, belirli bir dokümana özgü işlevler eklemek için kullanılır.
userSchema.methods.greet = function() {
return `Merhaba, ben ${this.fullName}`;
};
const user = new User({ firstName: 'Mehmet', lastName: 'Demir' });
console.log(user.greet()); // "Merhaba, ben Mehmet Demir"
Statik Metodlar
Statik metodlar, modelin kendisi üzerinde çalışan genel işlevlerdir.
userSchema.statics.findByName = function(name) {
return this.find({ firstName: new RegExp(name, 'i') });
};
User.findByName('mehmet').then(users => {
console.log(users);
});
Sanal Alanlar ve Metodlar ile Gelişmiş Uygulamalar
Veri Formatlama
Sanal alanlar, verileri istenilen formatta sunmak için kullanılabilir.
userSchema.virtual('birthYear').get(function() {
if (this.birthDate) return this.birthDate.getFullYear();
});
İşlem Yönetimi
Metodlar, karmaşık işlemleri yönetmek ve model içinde kapsüllenmiş iş mantığı sağlamak için kullanılır.
userSchema.methods.updatePassword = async function(newPassword) {
this.password = await hashPassword(newPassword);
await this.save();
};
Veri Validasyonu
Özel validasyon işlemleri için metodlar kullanılabilir.
userSchema.methods.isValidPassword = function(password) {
return comparePassword(password, this.password);
};
İpuçları ve En İyi Uygulamalar
Performans Düşünceleri
Sanal alanlar ve metodlar, hesaplama maliyetine sahip olabileceğinden, gereksiz kullanımdan kaçınılmalıdır.
Dokümantasyon ve Okunabilirlik
Sanal alanlar ve metodlar, kodun okunabilirliğini ve dokümantasyonunu iyileştirir, ancak karmaşıklığı da artırabilir.
Test Edilebilirlik
Geliştirdiğiniz metod ve sanal alanlar, uygulamanın diğer bölümleri gibi test edilmelidir.
Sonuç
Mongoose’daki sanal alanlar ve metodlar, veritabanı işlemlerini zenginleştiren ve esnek hale getiren güçlü araçlardır. Bu makalede, bu özelliklerin nasıl kullanılacağı, avantajları ve pratik uygulamaları üzerinde duruldu. Doğru kullanıldığında, sanal alanlar ve metodlar, Mongoose tabanlı uygulamalarınızı daha verimli ve yönetilebilir hale getirebilir.