MongoDB veri okumak ve yazmak

MongoDB veri okumak ve yazmak

MongoDB veri okumak ve yazmak

Önceki makalede MongoDB veritabanı bağlantısından bahsetmiştik.

Bu derste D ile veritabanına veri yazmayı ve okumayı öğreneceğiz.

Kiraz dizininde iken kaynak dosyamız olan ana.d kütüğünü bir metin düzenleyici ile açıyoruz.

emacs source/ana.d

İçindeki kaynak kodu değiştiriyoruz.

import vibe.vibe;
import vibe.db.mongo.mongo;

struct Kullanıcı
{
    @name("_id") int no;
    string isim;
    string şifre;
}

void günlüğeYaz (HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    logInfo("Veritabanına bağlanıyorum...");
    auto veritabanı = connectMongoDB("127.0.0.1").getDatabase("kiraz");
    auto kullanıcılar = veritabanı["kullanıcılar"];

    logInfo("Veri ekliyorum...");
    Kullanıcı mehmet;
    mehmet.no = 9;
    mehmet.isim = "Mehmet";
    mehmet.şifre = "azgizli";
    kullanıcılar.insertOne(mehmet);
    yanıt.writeBody("İşlem başarılı");

}

void günlük (HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    logInfo("Veritabanına bağlanıyorum...");

    auto veritabanı = connectMongoDB("127.0.0.1").getDatabase("kiraz");
    auto kullanıcılar = veritabanı["kullanıcılar"];

    logInfo("Veritabanındaki tüm kayıtları gösteriyorum...");

    auto sonuç = kullanıcılar.find();

    foreach (i, kayıt; sonuç.byPair)
        logInfo("Kayıt %d: %s", i, kayıt.toJson().toString());

    yanıt.writeBody("İşlem başarılı");
}

void main()
{
    auto yolAtayıcı = new URLRouter;
    yolAtayıcı.get("/günlük", &günlük);
    yolAtayıcı.get("/günlük/yaz", &günlüğeYaz);

    auto ayarlar = new HTTPServerSettings;
    ayarlar.port = 8080;
    ayarlar.bindAddresses = ["::1", "127.0.0.1"];
    listenHTTP(ayarlar, yolAtayıcı);

    logInfo("Lütfen tarayıcınızla http://127.0.0.1:8080/ adresini açınız.");
    runApplication();
}

dub komutu ile uygulamayı derleyip, çalıştırınız.

Tarayıcınızla http://localhost:8080/günlük adresini açınız.

Uygulamanın günlük çıktısına baktığımızda hâl-i hazırda veritabanında olan kayıtlar gözüküyor.

Vibe.d günlük çıktısı

Yeni kayıt eklemek için sunucunun üzerinde günlük/yaz adresini açmak gerekiyor.

Tarayıcı ile http://localhost:8080/günlük/yaz adresini açınız.

Tekrar günlük adresini açtığınızda yeni bir kayıt eklendiğini görebilirsiniz.

MongoDB veri okumak

Rastgele kullanıcılar oluşturmak

Birden çok kullanıcı oluşturmak için ufak bir uygulama yazalım.

Ancak öncelikle kiraz dizinindeki dub.sdl kütüğünü aşağıdaki gibi değiştirelim.

name "kiraz"
targetType "executable"
sourcePaths "kaynak"
dependency "vibe-d" version="~>0.9"

Burada eklediğimizi sourcePaths "kaynak" ifadesi derleyicinin kaynak kütükleri kaynak dizininde aramasını söylüyor.

Uygulamanın kaynak dizininde kullanıcı.d isimli bir kütük oluşturalım. İçine de aşağıdaki bilgileri girelim.

import std;

struct Kullanıcı
{
    int _id;
    string isim;
    string şifre;

    string toString()
    {
        return to!string(_id) ~ " " ~ isim ~ " " ~ şifre;
    }
}

static sayaç = 0;
enum İsimler { Ali, Veli, Ahmet, Ayşe, Irmak, Hasan, Hüseyin, Osman, Ömer, Mehmet, Naci }
enum Şifreler { çokgizli, azgizli, gizlideğil, yok,
                basit, kolay, karışık, sağlam  }

static İsimler[] karışıkİsimler;
static Şifreler[] karışıkŞifreler;

Kullanıcı kullanıcıOluştur()
{
    if (sayaç == 0)
    {
        karışıkİsimler = [EnumMembers!İsimler].randomShuffle();
        karışıkŞifreler = [EnumMembers!Şifreler].randomShuffle();
    }

    Kullanıcı kullanıcı;
    kullanıcı._id = uniform(10, 10000);
    kullanıcı.isim = to!string(karışıkİsimler[sayaç]);
    kullanıcı.şifre = to!string(karışıkŞifreler[sayaç]);
    sayaç += 1;
    if (sayaç == 8)
        sayaç = 0;
    return kullanıcı;
}

unittest
{
    for (int i = 0; i < 10; ++i)
    {
        auto kullanıcı = kullanıcıOluştur();
        writeln(kullanıcı);
    }
}

D'nin sağladığı olanaklardan birisi kod parçalarını daha geliştirirken sınamanıza izin vermesidir.

Buna birim testi ismi veriliyor.

Uygulamayı sınamak için bu sefer dub kullanmadan uygulamanın kaynak dizinine geliyoruz.

Burada birim testini derlemek için aşağıdaki derleyici komutunu veriyoruz.

dmd -main -unittest kullanıcı.d -ofkullanıcı

Şimdi uygulamayı sınayıp çalıştıralım.

./kullanıcı

Uygulamayı çalıştırdığımızda çıktısı aşağıdaki gibidir.

3140 Ömer azgizli
3659 Ali gizlideğil
1269 Hüseyin kolay
9087 Hasan basit
593 Veli çokgizli
1648 Mehmet sağlam
7219 Ayşe karışık
3298 Ahmet yok
546 Hüseyin kolay
1256 Ayşe yok
1 modules passed unittests

Böylece uygulamanın beklendiği gibi çalıştığını sınamış olduk.

MongoDB birden fazla rastgele kullanıcı ekleme

Kaynak dizinindeki ana.d kütüğünü değiştirelim.

import vibe.d;
import std;
import kullanıcı;

void günlüğeYaz (HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    logInfo("Veritabanına bağlanıyorum...");
    auto veritabanı = connectMongoDB("127.0.0.1").getDatabase("kiraz");
    auto kullanıcılar = veritabanı["kullanıcılar"];

    logInfo("Veri ekliyorum...");
    Kullanıcı kullanıcı = kullanıcıOluştur();
    kullanıcılar.insertOne(kullanıcı);

    yanıt.writeBody("İşlem başarılı");

}
void günlük (HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    logInfo("Veritabanına bağlanıyorum...");

    auto veritabanı = connectMongoDB("127.0.0.1").getDatabase("kiraz");
    auto kullanıcılar = veritabanı["kullanıcılar"];

    logInfo("Veritabanındaki tüm kayıtları gösteriyorum...");

    auto sonuç = kullanıcılar.find();

    foreach (i, kayıt; sonuç.byPair)
        logInfo("Kayıt %d: %s", i, kayıt.toJson().toString());

    yanıt.writeBody("İşlem başarılı");
}


void main()
{
    auto yolAtayıcı = new URLRouter;
    yolAtayıcı.get("/günlük", &günlük);
    yolAtayıcı.get("/günlük/yaz", &günlüğeYaz);

    auto ayarlar = new HTTPServerSettings;
    ayarlar.port = 8080;
    ayarlar.bindAddresses = ["::1", "127.0.0.1"];
    listenHTTP(ayarlar, yolAtayıcı);

    logInfo("Lütfen tarayıcınızla http://127.0.0.1:8080/ adresini açınız.");
    runApplication();
}

Uygulamayı derleyip çalıştırmak için dub komutunu veriniz.

Ekle bölümünden bir kaç kayıt ekledikten sonra günlük adresini açınız.

Uygulamanın günlük çıktısında yeni eklenen kayıtları görebilirsiniz.

MongoDB birden fazla kayıt eklemek

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.