PHP MongoDB Kullanımı

PHP ile MongoDB veritabanını kullanmak için gerekli olan MongoDB kütüphanesinin kurulumu, MongoDB bağlantısı, veri ekleme, güncelleme, silme, sorgulama işlemleri ile ilgili bilgiler yer alıyor.

PHP MongoDB kurulumu

PHP ile MongoDB veritabanını kullanabilmek için öncelikle MongoDB Driver olarak adlandırılan arabirimin kurulması gerekir.

Arabirimin kurulumu işletim sistemine göre farklılık gösterse de temel olarak gerekli olan dosyanın PHP içinde yer alan ext klasörüne aktarılarak gerekli ayarların php.ini dosyasına eklenmesidir.

Kurulum ile ilgili bilgi için aşağıdaki adreste yer alan bilgilerden faydalanabilirsiniz.

http://php.net/manual/mongodb.installation.php

Kurulum için öncelikle mevcut PHP ayarlarına aşağıdaki komut ile bakılır.

<?php

phpinfo();

?>

Listelenen ayarlardaki PHP Version, Thread Safety ve Loaded Configuration File alanlarına bakılarak uygun DLL dosyası indirilir.

NOT: Thread Safety değeri Disabled ise Non Thread Safe indirilmelidir.

Gereki olan dosya ext klasörüne aktarıldıktan sonra php.ini dosyasına PHP sürümüne göre extension=mongodb veya extension=php_mongodb eklenerek sonraki adıma geçilir.

MongoDB ayarlarının aktif olması için sunucu yazılımı yeniden başlatılarak kurulum tamamlanır.

Kurulum tamamlandıktan sonra aşağıdaki komut ile kurulum kontrol edilebilir.

<?php

if (extension_loaded('MongoDB')) {
    echo 'MongoDB kurulu.';
} else {
    echo 'MongoDB kurulu değil.';
}

?>

PHP MongoDB kullanımı

MongoDB kütüphanesi içinde veritabanı işlemleri yapabilmek için çeşitli sınıflar yer alıyor.

MongoDB işlemlerinde genellikle MongoDB\Driver içinde yer alan Manager, Query ve BulkWrite sınıfları kullanılır.

Kütüphane içinde diğer MongoDB işlemleri için MongoDB\BSON, MongoDB\Driver\Monitoring ve MongoDB\Driver\Exception sınıfları da yer alır.

PHP MongoDB bağlantısı

PHP ile MongoDB bağlantısı kurmak için MongoDB\Driver\Manager sınıfı kullanılır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

var_dump($baglanti);

?>

Bağlantı için aşağıdaki biçim kullanılır.

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

Bağlantı sonrası MongoDB\Driver\Manager sınıfı içinde yer alan executeBulkWrite, executeCommand, executeQuery metotları MongoDB işlemleri için kullanılır.

MongoDB veri ekleme

MongoDB veritabanına veri eklemek için MongoDB\Driver\BulkWrite sınıfında yer alan insert metodu kullanır.

$veri = new MongoDB\Driver\BulkWrite();
$veri->insert(['adi' => 'Yusuf', 'soyadi' => 'SEZER']);

Eklenecek veri metoda dizi veya nesne olarak girilerek veri eklenmeye hazır hale getirilir.

Hazırlanan veriyi veritabanına eklemek için MongoDB\Driver\Manager sınıfında yer alan executeBulkWrite metoduna koleksiyon adı ve eklenecek veri parametre olarak verilerek ekleme işlemi yapılır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->insert(['adi' => 'Yusuf', 'soyadi' => 'SEZER']);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
var_dump($sonuc);

?>

Ekleme işlemi sonucunda metot işlem sonucuyla ilgili bilgi almak için MongoDB\Driver\WriteResult sınıfında yer alan getDeletedCount, getInsertedCount, getMatchedCount, getModifiedCount gibi metot ve özellikleri kullanmaya imkan verir.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->insert(['adi' => 'Yusuf', 'soyadi' => 'SEZER']);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getInsertedCount() . ' kayıt eklendi';

?>

Birden fazla kayıt eklemek için insert metodu tekrar kullanılabilir.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->insert(['adi' => 'Yusuf', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Ramazan', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Sinan', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Mehmet', 'soyadi' => 'SEZER']);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getInsertedCount() . ' kayıt eklendi.';

?>

MongoDB veri güncelleme

MongoDB veritabanında bulunan veriyi güncellemek için MongoDB\Driver\BulkWrite sınıfında yer alan update metodu kullanır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->update(['adi' => 'Yusuf'], ['$set' => ['adi' => 'Yusuf Sefa']]);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getModifiedCount() . ' kayıt güncellendi.';

?>

Güncelleme işlemini birden fazla kayıtta yapmak için üçüncü parametreye dizi olarak multi ayarı true verilmelidir.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->update(['adi' => 'Yusuf'], ['$set' => ['adi' => 'Yusuf Sefa']], ['multi' => true]);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getModifiedCount() . ' kayıt güncellendi.';

?>

MongoDB veri silme

MongoDB veritabanında bulunan veriyi silmek için MongoDB\Driver\BulkWrite sınıfında yer alan delete metodu kullanır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->delete(['adi' => 'Yusuf Sefa']);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getDeletedCount() . ' kayıt silindi.';

?>

Silme işlemi sonucunda eşleşen tüm kayıtlar silinecektir.

Sadece bir kaydın silinmesi için ikinci parametreye dizi olarak limit ayarı true verilmelidir.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->delete(['soyadi' => 'SEZER'], ['limit' => true]);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $sonuc->getDeletedCount() . ' kayıt silindi.';

?>

MongoDB toplu işlem

MongoDB işlemlerini toplu olarak yapmak için MongoDB\Driver\BulkWrite sınıfında yer alan metotların tekrar kullanılması yeterli olacaktır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$veri = new MongoDB\Driver\BulkWrite();
$veri->delete([]);
$veri->insert(['adi' => 'Yusuf', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Ramazan', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Sinan', 'soyadi' => 'SEZER']);
$veri->insert(['adi' => 'Mehmet', 'soyadi' => 'SEZER']);
$veri->update(['adi' => 'Yusuf', 'soyadi' => 'SEZER'], ['$set' => ['adi' => 'Yusuf Sefa', 'soyadi' => 'SEZER']]);

$sonuc = $baglanti->executeBulkWrite('deneme.koleksiyon', $veri);
echo $veri->count() . ' işlem yapıldı.';

?>

NOT: Yapılan toplam işlem sayısı ile ilgili bilgi almak için MongoDB\Driver\BulkWrite sınıfına ait count metodu kullanılmıştır.

MongoDB veri çekme

MongoDB veritabanında bulunan verileri çekme işlemi veri ekleme, güncelleme ve silme işleminden farklı olarak MongoDB\Driver\Query sınıfı ile yapılır.

$sorgu = new MongoDB\Driver\Query([]);

Sınıf kurucu parametresi olarak MongoDB sorgusu ve sorgu seçeneklerini alır.

$sorgu = new MongoDB\Driver\Query([], ['sort' => ['adi' => -1], 'limit' => 3]);

Hazırlanan sorgu MongoDB\Driver\Manager sınıfında yer alan executeQuery metoduna sorgunun çalışacağı koleksiyon adı ve sorgu parametre olarak verilerek sorgulama işlemi yapılır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$sorgu = new MongoDB\Driver\Query([]);
$sonuc = $baglanti->executeQuery('deneme.koleksiyon', $sorgu);

var_dump($sonuc);

?>

Sorgulama işlemi sonucunda metot sorgu sonucuyla ilgili bilgi almak için MongoDB\Driver\Cursor sınıfında yer alan metotları kullanmaya imkan verir.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$sorgu = new MongoDB\Driver\Query([]);
$sonuc = $baglanti->executeQuery('deneme.koleksiyon', $sorgu);

print_r($sonuc->toArray());

?>

MongoDB\Driver\Cursor sınıfı Traversable sınıfını implement ettiğinden sonuçlara foreach ile de erişim sağlanır.

<?php

$baglanti = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$sorgu = new MongoDB\Driver\Query([]);
$sonuc = $baglanti->executeQuery('deneme.koleksiyon', $sorgu);

foreach ($sonuc as $satir) {
    echo $satir->adi . ' ' . $satir->soyadi;
    echo '<br />';
}

?>

Karmaşık sorgular

MongoDB veritabanında bulunan verilerle ilgili daha karmaşık sorgulara yapmak için MongoDB\Driver\Command ile MongoDB\Driver\Manager sınıfında yer alan executeCommand metodu kullanılabilir.

PHP ile temel MongoDB işlemleri kolay bir şekilde yapılırken karmaşık MongoDB işlemlerini yapmak zaman alabilir.

Karmaşık MongoDB işlemleri için çeşitli sınıfların kullanılması faydalı olacaktır.

PHP Derslerine buradan ulaşabilirsiniz…

MongoDB Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!