Node.js – MongoDB CRUD İşlemleri

Merhaba,

Bu içeriğimizde Node.js ortamında MongoDB’ye CRUD işlemlerinin nasıl yapıldığını ele alacağız. İlk olarak bir adet Node.js projesi inşa ediyoruz ve ardından projeye gerekli paketleri(express, mongoose vs.) entegre ediyoruz.

İçeriğimizde yapacağımız tüm örneklendirmeleri aşağıdaki uygulama çerçevesinde ele alacağız.

const mongoose = require("mongoose");
const express = require("express");
const app = express();

mongoose.connect("mongodb://localhost/companydb")
    .then(() => console.log("Veritabanı bağlantısı başarıyla sağlanmıştır..."))
    .catch(error => console.log("Veritabanı bağlantısı sağlanırken beklenmeyen bir hatayla karşılaşıldı...", error.message));

const employeeRoter = require("./routes/employeeRouter");
app.use("/employee/", employeeRoter);

app.listen(5000, () => console.log("Yayın başladı..."));

Ve ayriyetten makale boyunca kullanacağımız modülümüz aşağıdaki olacaktır.

const mongoose = require("mongoose");

module.exports = mongoose.model("Employees", new mongoose.Schem a({
    _id: Number,
    userName: String,
    name: String,
    surName: String,
    age: Number
}));

Kayıt Ekleme

MongoDB’ye veri eklemeyi önceki Node.js – MongoDB’ye Mongoose İle Şema Oluşturma ve Kayıt Ekleme başlıklı yazımızda incelemiştik.

Tekrardan değinmemiz gerekirse eğer;

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/addEmployee", (request, response, next) => {
    let employee = new model({
        _id: 3,
        userName: "abc",
        name: "X",
        surName: "Y",
        age: 35
    });

    employee.save((error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        } else {
            response.json(data);
        }
    });
});

module.exports = router;

görüldüğü üzere “save” fonksiyonu ile veritabanına ilgili documenti kaydedebilmekteyiz.

Sorgu Oluşturmak(Find)

Veritabanındaki herhangi bir collectiondaki verilerin tümünü ya da şarta bağlı bir kısmını elde etmek için “find”, “findOne” ya da “findById” fonksiyonlarını aşağıdaki durumlarda kullanabiliriz.

  • Tüm Kayıtları Çekmek

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getEmployeeList", (request, response, next) => {
        model.find({}, (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    
    module.exports = router;
    

    “find” fonksiyonu ile veritabanındaki tüm kayıtları bu şekilde elde edebilmekteyiz. Dikkat edilmesi gereken husus, ilgili fonksiyonun ilk parametresine “{ }” değerinin verilmesidir. Bu şekilde şarta bağlı kalmaksızın veritabanındaki tüm kayıtlar belirtilmiş bulunmaktadır.

  • Şartlı Sorgu Oluşturmak
    Belirli kriterlere uygun verileri getirmek için “find” fonksiyonunu aşağıdaki gibi kullanabiliriz.

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getEmployee", (request, response, next) => {
        model.find({ name: "Gençay" }, (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    Dikkat ederseniz “find” fonksiyonunun ilk parametresine “{ name: “Gençay” }” değerini belirtmiş bulunmaktayız. Bu değer, collectiondaki “name” kolonu “Gençay” olan tüm documentleri getir manasına gelmektedir.
    Node.js - MongoDB CRUD İşlemleri
    Benzer mantıkla şartları çoğaltabilir ve aşağıdaki gibi birden fazla kolon için kriter belirleyebiliriz.

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getEmployee", (request, response, next) => {
        model.find({ name: "Gençay", surName: "Yıldız", userName: "gncy" }, (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    Node.js - MongoDB CRUD İşlemleri

    Ayrıca sorgu sonucu listelemek istenilen kolonlarda aşağıdaki gibi ayarlanabilmektedir.

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getEmployee", (request, response, next) => {
        model.find({ name: "Gençay" }, "name", (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    “find” fonksiyonunun ikinci parametresine bakarsanız eğer string olarak belirtilen “name” ifadesi bu sorgulama sonucunda eşleşen kayıtların sadece “name” kolonlarının listelenmesini ifade etmektedir.
    Node.js - MongoDB CRUD İşlemleri

    Birden fazla kolon listelemek istenirse eğer;

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getEmployee", (request, response, next) => {
        model.find({ name: "Gençay" }, "name surName", (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    şeklinde kolon isimlerinin yanyana yazılması yeterlidir.

    Node.js - MongoDB CRUD İşlemleri

  • Tekil Sorgu Oluşturmak(findOne)
    Eğer ki veritabanında aranan tek bir veri ise o veriye özel “findOne” fonksiyonu ile tekil sorgu oluşturulabilir.

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getSingleEmployee", (request, response, next) => {
        model.findOne({ name: "Gençay" }, "name surName", (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    Node.js - MongoDB CRUD İşlemleri

    “findOne” fonksiyonunun “find” fonksiyonundan farkı; “find” fonksiyonu collection içerisindeki tüm kayıtların şarta eşitlik durumunu incelerken, “findOne” fonksiyonu ise ilk bulduğu kaydı getirecek ve diğer verilerin eşitlik durumunu incelemeyecektir.

  • ID Bazlı Arama(findById)
    Veriler üzerinde id bazlı arama yapabilmek içinde “findById” fonksiyonunu kullanabilmekteyiz.

    const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/getByIdEmployee", (request, response, next) => {
        model.findById("1", "name surName", (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    Direkt olarak parametreye verilen id değerine sahip olan veri elde edilecektir.
    Node.js - MongoDB CRUD İşlemleri

Veri Güncelleme

Veri güncellemek için “update” fonksiyonu kullanılmaktadır.

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/updateEmployee", (request, response, next) => {
    model.update({ name: "Gençay" }, { surName: "Yıldız (Yeni)" }, (error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        }
        else {
            response.json(data);
        }
    });
});
module.exports = router;

Yukarıdaki kod bloğunu incelerseniz eğer; “name” kolonu “Gençay” olan verinin “surName” kolonunu “Yıldız (Yeni)” yap! demekteyiz. Burada dikkat ederseniz şarta uyan tüm veriler için çoğul değil, tekil bir tarifte bulunmuş bulunmaktayım. Bunun sebebi, “update” fonksiyonu bu şekilde kullanıldığında sadece şarta uyan ilk veride ilgili işlemi uygulamaktadır.
Node.js - MongoDB CRUD İşlemleri

Eğer ki şarta uyan tüm verilerde update işlemini uygulamak istiyorsanız sorguya “multi : true” değerini aşağıdaki gibi belirtmeniz gerekmektedir.

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/updateEmployee", (request, response, next) => {
    model.update({ name: "Gençay" }, { surName: "Yıldız (Yeni)" }, { multi: true }, (error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        }
        else {
            response.json(data);
        }
    });
});
module.exports = router;

Bu şekilde güncelleme işlemi yaptığımız taktirde şarta uyan tüm veriler etkilenecektir.
Node.js - MongoDB CRUD İşlemleri

Upsert Anahtar Kelimesi
Yapacağımız güncelleme işlemlerinde eğer ki şarta uygun veri varsa ilgili işlemi icra edebiliriz. Ya yoksa! ve böyle bir durumda olmayan veriyi kaydetmek istiyorsak! Evet… Bu işlemi kontrollerle sağlayabiliriz lakin Upsert keywordü tam da bu ihtiyaca istinaden üretilmiş bir işlevselliğe sahiptir.

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/updateEmployee", (request, response, next) => {
    model.update({ name: "Gençay" }, { surName: "Yıldız (Yeni)" }, { upsert: true }, (error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        }
        else {
            response.json(data);
        }
    });
});
module.exports = router;

Burada; eğer “name” kolunu “Gençay” olan veri varsa “surName” kolonunu “Yıldız (Yeni)” olarak güncelle, yok eğer yoksa “name” kolonu “Gençay” “surName” kolonuda “Yıldız (Yeni)” olan veriyi ekle demiş bulunmaktayız.

ID Bazlı Güncelleme(findByIdAndUpdate)
Id bazlı güncelleme işlemi için;

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/updateByIdEmployee", (request, response, next) => {
    model.findByIdAndUpdate("1", { surName: "Yıldız (Yeni)" }, (error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        }
        else {
            response.json(data);
        }
    });
});
module.exports = router;

şeklinde çalışılabilir.

Veri Silme

Üç farklı yöntemle veri silebiliriz. Bunlar;

  1. const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/deleteById", (request, response, next) => {
        model.findById("1", (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                data.remove(error => console.log("Veri silinirken beklenmeyen bir hatayla karşılaşıldı..."));
                response.json(data);
            }
        });
    });
    module.exports = router;
    

    Önce “findById” fonksiyonuyla ilgili veri getirilir, ardından veri üzerinden “remove” metodu ile veritabanından fiziksel olarak iligli veri silinir.

  2. const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/delete", (request, response, next) => {
        model.findOneAndRemove({ userName: "gncy2" }, (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    
    module.exports = router;
    

    “findOneAndRemove” fonksiyonu ile şarta uyan ilk elemanı silecektir.

  3. const express = require("express");
    const router = express.Router();
    
    const model = require("../models/employee");
    
    router.get("/delete", (request, response, next) => {
        model.remove({ userName: "gncy2" }, (error, data) => {
            if (error) {
                response.send("Beklenmeyen bir hatayla karşılaşıldı...");
            }
            else {
                response.json(data);
            }
        });
    });
    
    module.exports = router;
    

    Şarta uyan tüm verileri silecektir.

Modeldeki Alt Propertylere Erişmek

Eğer ki elimizdeki model aşağıdaki gibi alt propertylerden oluşuyorsa;

const mongoose = require("mongoose");

module.exports = mongoose.model("Employees", new mongoose.Schem a({
    _id: Number,
    userName: String,
    name: String,
    surName: String,
    age: Number,
    country: {
        city: String,
        county: String,
        adress: {
            postcode: Number
        }
    }
}));

bu propertylere erişebilmek için aşağıdaki gibi çalışmak gerekmektedir.

const express = require("express");
const router = express.Router();

const model = require("../models/employee");

router.get("/updateExample", (request, response, next) => {
    model.update({ "country.city": "Ankara" }, { "country.adress.postcode": "06130" }, { upsert: true }, (error, data) => {
        if (error) {
            response.send("Beklenmeyen bir hatayla karşılaşıldı...");
        }
        else {
            response.json(data);
        }
    });
});

module.exports = router;

İlgililenlerin faydalanması dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. 27 Ağustos 2018

    […] yazılarımdan Node.js – MongoDB CRUD İşlemleri başlıklı yazımda MongoDB veritabanına nasıl kayıt eklendiğini incelemiştik. İlgili […]

  2. 28 Ağustos 2018

    […] yazılarımdan Node.js – MongoDB CRUD İşlemleri başlıklı yazımda MongoDB üzerinde Mongoose modülü ile CRUD işlemlerini incelerken […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.