Projenize Mongoose'u yükleyin:
npm install mongoose
Projenize Mongoose'u yükleyin:
const mongoose = require("mongoose");
// Yerel MongoDB'ye bağlanma
mongoose.connect("mongodb://localhost/mydatabase", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// MongoDB Atlas'a bağlanma
mongoose.connect(
"mongodb+srv://<kullanici_adi>:<sifre>@cluster0.mongodb.net/mydatabase",
{
useNewUrlParser: true,
useUnifiedTopology: true,
}
);
// Bağlantı olaylarını yönetme
const db = mongoose.connection;
db.on("error", console.error.bind(console, "bağlantı hatası:"));
db.once("open", function () {
console.log("MongoDB'ye bağlanıldı");
});
Şemalar, bir koleksiyondaki belgelerin yapısını tanımlar.
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
// Temel şema
const userSchema = new Schema({
name: String,
email: String,
age: Number,
});
// Daha fazla seçenek içeren şema
const productSchema = new Schema({
name: {
type: String,
required: true,
trim: true,
},
price: {
type: Number,
min: 0,
},
category: {
type: String,
enum: ["Elektronik", "Kitaplar", "Giyim"],
},
inStock: {
type: Boolean,
default: true,
},
createdAt: {
type: Date,
default: Date.now,
},
});
Modeller, Şema tanımlarından türetilmiş yapılandırıcılardır.
const User = mongoose.model("User", userSchema);
const Product = mongoose.model("Product", productSchema);
// Tek bir belge oluşturma
const newUser = new User({
name: "John Doe",
email: "john@example.com",
age: 30,
});
newUser.save((err, user) => {
if (err) return console.error(err);
console.log("Kullanıcı kaydedildi:", user);
});
// Birden fazla belge oluşturma
User.create(
[
{ name: "Jane Doe", email: "jane@example.com", age: 25 },
{ name: "Bob Smith", email: "bob@example.com", age: 35 },
],
(err, users) => {
if (err) return console.error(err);
console.log("Kullanıcılar oluşturuldu:", users);
}
);
// Tüm belgeleri bulma
User.find({}, (err, users) => {
if (err) return console.error(err);
console.log("Tüm kullanıcılar:", users);
});
// Belirli kriterlere göre belgeleri bulma
User.find({ age: { $gte: 18 } }, (err, users) => {
if (err) return console.error(err);
console.log("Yetişkin kullanıcılar:", users);
});
// Tek bir belge bulma
User.findOne({ email: "john@example.com" }, (err, user) => {
if (err) return console.error(err);
console.log("Bulunan kullanıcı:", user);
});
// ID ile bulma
User.findById("5f7c3b3f9d3e2a1234567890", (err, user) => {
if (err) return console.error(err);
console.log("ID ile kullanıcı:", user);
});
// Tek bir belgeyi güncelleme
User.updateOne({ name: "John Doe" }, { age: 31 }, (err, result) => {
if (err) return console.error(err);
console.log("Güncelleme sonucu:", result);
});
// Birden fazla belgeyi güncelleme
User.updateMany({ age: { $lt: 18 } }, { isMinor: true }, (err, result) => {
if (err) return console.error(err);
console.log("Güncelleme sonucu:", result);
});
// Bul ve güncelle
User.findOneAndUpdate(
{ email: "john@example.com" },
{ $inc: { age: 1 } },
{ new: true },
(err, updatedUser) => {
if (err) return console.error(err);
console.log("Güncellenmiş kullanıcı:", updatedUser);
}
);
// Tek bir belgeyi silme
User.deleteOne({ name: "John Doe" }, (err) => {
if (err) return console.error(err);
console.log("Kullanıcı silindi");
});
// Birden fazla belgeyi silme
User.deleteMany({ age: { $lt: 18 } }, (err) => {
if (err) return console.error(err);
console.log("Küçük yaşlı kullanıcılar silindi");
});
// Bul ve sil
User.findOneAndDelete({ email: "john@example.com" }, (err, deletedUser) => {
if (err) return console.error(err);
console.log("Silinen kullanıcı:", deletedUser);
});
Mongoose, zengin bir sorgu API'si sağlar.
// Temel sorgulama
User.find({ age: { $gte: 18 } })
.sort({ name: 1 })
.limit(10)
.select("name email")
.exec((err, users) => {
if (err) return console.error(err);
console.log("Yetişkin kullanıcılar:", users);
});
// Sorguları zincirleme
User.find({ isActive: true })
.where("age")
.gte(18)
.lte(65)
.where("email")
.ne(null)
.limit(50)
.sort("-lastLogin")
.select("name email")
.exec((err, users) => {
if (err) return console.error(err);
console.log("Aktif yetişkin kullanıcılar:", users);
});
// Sorgu oluşturucularını kullanma
const query = User.find({ isActive: true });
query.where("age").gte(18).lte(65);
query.where("email").ne(null);
query.limit(50).sort("-lastLogin").select("name email");
query.exec((err, users) => {
if (err) return console.error(err);
console.log("Aktif yetişkin kullanıcılar:", users);
});
// $or operatörünü kullanma
User.find(
{
$or: [{ age: { $lt: 18 } }, { age: { $gt: 65 } }],
},
(err, users) => {
if (err) return console.error(err);
console.log("Çalışma yaşında olmayan kullanıcılar:", users);
}
);
// Regex kullanma
User.find({ name: /^John/ }, (err, users) => {
if (err) return console.error(err);
console.log("John ile başlayan isimlere sahip kullanıcılar:", users);
});
Populate, belgelerdeki belirli yolları diğer koleksiyonlardan belgelerle otomatik olarak değiştirme sürecidir.
// Referanslarla şemaları tanımlama
const authorSchema = new Schema({
name: String,
bio: String,
});
const bookSchema = new Schema({
title: String,
author: { type: Schema.Types.ObjectId, ref: "Author" },
});
const Author = mongoose.model("Author", authorSchema);
const Book = mongoose.model("Book", bookSchema);
// Bir yazar ve bir kitap oluşturma
const author = new Author({ name: "John Doe", bio: "Verimli bir yazar" });
author.save((err, savedAuthor) => {
if (err) return console.error(err);
const book = new Book({ title: "Mongoose Guide", author: savedAuthor._id });
book.save((err, savedBook) => {
if (err) return console.error(err);
console.log("Kitap kaydedildi:", savedBook);
});
});
// Populate kullanma
Book.findOne({ title: "Mongoose Guide" })
.populate("author")
.exec((err, book) => {
if (err) return console.error(err);
console.log("Kitap ve yazar bilgisi:", book);
});
Middleware'ler, belgeler üzerinde belirli işlemleri gerçekleştiren işlevlerdir.
// Middleware tanımlama
userSchema.pre("save", function (next) {
if (!this.email) {
return next(new Error("Email gereklidir"));
}
next();
});
// Middleware işleyicisi tanımlama
userSchema.post("save", function (doc) {
console.log("Kullanıcı kaydedildi:", doc);
});
Mongoose, şemalar üzerinde doğrulama işlevselliği sağlar.
const userSchema = new Schema({
name: {
type: String,
required: [true, "Kullanıcı adı gereklidir"],
minlength: [3, "Kullanıcı adı en az 3 karakter olmalıdır"],
},
email: {
type: String,
required: [true, "Email gereklidir"],
match: [/.+@.+..+/, "Geçerli bir email adresi giriniz"],
},
age: {
type: Number,
min: [0, "Yaş negatif olamaz"],
max: [120, "Yaş çok büyük"],
},
});
İndeksler, sorgu performansını artırmak için kullanılır.
// Şema üzerinde indeks oluşturma
userSchema.index({ email: 1 });
userSchema.index({ age: -1 });
// Koleksiyon üzerinde indeks oluşturma
User.createIndex({ email: 1 });
Sanal alanlar, şemada fiziksel olarak depolanmayan hesaplanmış verileri temsil eder.
userSchema.virtual("fullName").get(function () {
return `${this.firstName} ${this.lastName}`;
});
Mongoose, çeşitli eklentiler sağlar.
// Eklenti yükleme
const mongoosePaginate = require("mongoose-paginate-v2");
userSchema.plugin(mongoosePaginate);
İşlemler, Mongoose'un çeşitli operasyonları için sağladığı yardımcı işlevlerdir.
// İşlem oluşturma
const session = await mongoose.startSession();
session.startTransaction();
try {
await User.create([{ name: "John" }], { session });
await Product.create([{ title: "Book" }], { session });
await session.commitTransaction();
} catch (error) {
await session.abortTransaction();
throw error;
} finally {
session.endSession();
}
Hata yönetimi, hataları etkili bir şekilde ele almak için çeşitli stratejileri içerir.
User.findById("invalid_id", (err, user) => {
if (err) {
console.error("Hata:", err);
return;
}
console.log("Kullanıcı:", user);
});
2024 © Tüm hakları saklıdır - buraxta.com