PHP ile MongoDB Kullanımı

PHP ile MongoDB Kullanımı

MongoDB, 10Gen isimli şirket tarafından açık kaynaklı olarak geliştirilen NoSQL veritabanıdır. Anlık çok fazla işlem yapmanız gerektiğinde veya önbellekleme yapmak istediğinizde tercih edilebilir. Mobil platformlarda yer bildirimi (check-in) yapmak için çoğumuzun kullandığı foursquare altyapısında MongoDB kullanıyor. Bildiğim kadarıyla link kısaltma servisi olarak sıkça kullanılan bit.ly’de MongoDB’yi tercih ediyor.

Ben bu makalede varolan bir MongoDB sunucusuna PHP ile bağlanmayı ve kod örneklerini paylaşmaya çalışacağım. Eğer MongoDB kurmak istiyorsanızhttp://www.mongodb.org/downloads adresinden işletim sisteminize uygun sürümü indirebilir ve kurabilirsiniz.

PHP / MONGODB SÜRÜCÜSÜ KURALIM

MongoDB sunucusuna bağlanabilmek için php’ye mongodb sürücüsünü tanıtmanız gerekiyor. Eğer Linux kullanıyorsanız https://github.com/mongodb/mongo-php-driver github üzerinden kurulumu tamamlayabilirsiniz.

Windows ortamında MongoDB ile çalışmak istiyorsanız önceliklehttps://github.com/mongodb/mongo-php-driver/downloads adresinden çalışacağınız ortamın php sürümü, 32 / 64 bit gibi özelliklerini dikkate alarak dll dosyalarını indirin. İndirdiğiniz dll dosyaları arasından size uygun olanı seçin. (Ben Php 5.4 sürümünü barındıran 64 bit makinede çalıştığım için php_mongo-1.3.2RC1-5.4-vc9-x86_64.dll dosyasını seçtim) Ardından seçtiğiniz dosyayı Php sürücülerinin bulunduğu dizine php_mongo.dll ismiyle kopyalayın. Son olarakta php.ini dosyanıza;

extension=php_mongo.dll

satırını ekleyin. Web sunucunuzu yeniden başlattığınızda mongodb sürücüsünün php ile kullanıma hazır olduğunu göreceksiniz.

Not :

php.ini dosyasının ve php sürücülerinin hangi dizinde bulunduğunu bilmiyorsanız info.php isimli bir dosya oluşturun.

<?php
phpinfo();
?>

Dosyayı çalıştırdığınızda “extension_dir” yazan bölümde php sürücülerinin, “Loaded Configuration File” yazan bölümde ise php.ini dosyanızın bulunduğu dizini görebilirsiniz.

ADMIN UI (YÖNETİM ARAYÜZÜ) :

MySQL kullandığım projelerde veritabanı yönetimi için eğer 3306 portundan remote mysql yetkim varsa Navicat ( http://www.navicat.com/ ) isimli yazılımı kullanıyorum. Navicat ile MySQL, SQL Server, SQLite, Oracle ve PostgreSQL veritabanlarında işlem yapılabiliyor. MongoDB kullanmam gerektiğinde mongo için Admin UI araçlarını incelemeye başladım. Bir çok aracı denedim ancak çoğu yeterli ve kullanıcı dostu değildi. Denediklerim arasından kötünün iyisi olarak MongoVUE(http://www.mongovue.com/ ) isimli aracı önerebilirim. “Keşke Navicat’in Mongo desteği bulunsaydı” dediğim zamanlar çok olduğuna göre; ya ben alışkanlıklarımı değiştirmekte zorlandım, ya da gerçekten Mongo’nun UI araçları yeterli değil. :)

mongovue-300x206

MONGODB BAĞLANTISI KURMAK

MongoDB sürücümüzü PHP’ye tanıtarak kullanmaya başladığımıza göre ilk olarak mongo sunucusuna bağlanmayı deneyelim. MongoDB sunucusu ilk kurulduğunda varsayılan olarak 27017 portundan çalışıyor. Ayrıca Authentication (Kimlik Doğrulama) özelliği kapalı olarak geldiği için kullanıcı adı ve şifre bilgisi de girmeniz gerekmiyor. Host ve port bilgilerini yazarak hızlıca bağlanabilirsiniz.

 

<?php

try {

// Mongo Sunucusuna bağlanalım

$mongo = new Mongo(‘mongodb://127.0.0.1:27017’);

// Veritabanını Seçelim

$db = $mongo->selectDB(‘TestDb’);

} catch(MongoConnectionException $e) {

die(‘Baglanti Kurulamadi : ‘ . $e->getMessage());

}
?>

Eğer Mongo sunucunuzda kimlik doğrulama özelliği aktif edilmişse bağlantı satırını aşağıdaki şekilde düzenleyebilirsiniz.

$mongo = new Mongo(‘mongodb://kullaniciAdi:Sifre@127.0.0.1:27017’);

MONGODB İLE KAYITLARI LİSTELEME

Collection’lar MongoDB doküman gruplarıdır. Collection terimini MySQL’de ki tablo olarak düşünebilirsiniz. Collection’larda ortak şema, alan adları mecburiyeti yoktur fakat genel olarak uygulama bütünlüğü için normal veritabanı tabloları gibi ortak alan adları kullanılır. MongoDB’de kayıtlar Collection’ların içerisinde yer alır.

Bir Collection içerisinde yer alan kayıtları php ile listelemeye geçmeden önce bir kaç ipucu vereyim.

Eğer konsol üzerinden çalışıyorsanız;

db.createCollection(‘uyeler’);

komutu ile Collection oluşturabilirsiniz. Varolan collection’ları listelemek için;

show collections

satırını çalıştırmanız yeterlidir. Ben mongo sunucumda “uyeler” isminde bir collection oluşturdum. Bunun içerisine yine mongo konsolundan;
db.uyeler.insert({“nick”:”ibrahimhizlioglu”,”web”:”www.ibrahimhizlioglu.com”});

satırını çalıştırarak kayıtlar oluşturdum. Makalenin alt bölümlerinde PHP ile collection’a kayıt ekleme örnekleri de yer almaktadır. Şimdi uyeler collection’ı içerisinde yer alan kayıtları listeleyelim. (Yukarıda yer alan try-catch kodunu genişleterek devam edebilirsiniz)

<?php

// Üyeler İsimli Collection’ı Seçelim

$uyeler = new MongoCollection($db, ‘uyeler’);

// Toplam Üye Sayısını Ekrana Basalım

printf(‘<p>Toplam Uye : %s</p>’,$uyeler->count());

// Tüm uyeleri cekelim.

$uyeListesi = $uyeler->find();

// Çektiğimiz kayıtları listeleyelim.

foreach($uyeListesi as $uye) {

printf(‘Nick : %s | Web : %s <br>’, $uye[‘nick’], $uye[‘web’]);

}

?>

 

Collection içerisinde yer alan tüm kayıtları çekerek döngüye dahil ettik ve ekrana bastırdık. Eğer adı “İbrahim” olan kişileri kayıt tarihine göre sıralayarak ilk 10 kişiye ulaşmak istiyorsanız;

 

<?php

// Koşulu tanımlıyorum.

$where      = array(‘ad’ => ‘İbrahim’);

// Sıralamayı belirliyorum. (1 : ASC , -1 : DESC)

$orderBy    = array(‘kayitTarihi’ => 1);

// Kayıtları Çekiyorum.

$uyeListesi = $uyeler->find($where)->limit(10)->sort($orderBy);

?>

 

komutlarını çalıştırabilirsiniz. Eğer sadece tek bir kayıt çekecekseniz <kod>find()</kod> yerine <kod>findOne()</kod> fonksiyonunu tercih edebilirsiniz.

MONGODB İLE KAYIT EKLEME

Varolan Collection içerisine yeni kayıtlar eklemek için;
<?php

// Üye bilgilerini tanımlıyorum

$yeniUye = array(

‘nick’ => ‘ibrahimhizlioglu’,

‘web’  => ‘www.ibrahimhizlioglu.com’

);

try {

$uyeler->insert($yeniUye);

} catch(MongoCursorException $e) {

die(‘Yeni uye eklenirken teknik bir sorun olustu! > ‘ . $e->getMessage());

}

?>

MONGODB İLE KAYIT GÜNCELLEME

Collection içerisinden kaydı güncellemek istiyorsanız;

<?php

// Güncelleyeceğim kaydın koşulunu belirliyorum

$where     = array(‘nick’ => ‘ibrahimhizlioglu’);

// Güncellenecek alanını belirliyorum

$yeniBilgi = array(‘nick’ => ‘ibo’);

// Kaydı değiştiyorum

$uyeler->update($where, $yeniBilgi);

?>

MONGODB İLE KAYIT SİLME

Varolan Collection içerisinden kaydı silmek istiyorsanız;

<?php

// Sileceğim kaydın koşullarını belirliyorum

$where = array(‘nick’ => ‘ibrahimhizlioglu’);

// Kaydı collection içerisinden siliyorum

$uyeler->remove($where);

?>

Php ile MongoDB veritabanı üzerinde CRUD (Create Read Update Delete) işlemleri özetle bu şekilde yapılabiliyor.

Daha fazla detay için;
http://www.php.net/manual/en/class.mongodb.php ,
http://www.php.net/manual/en/class.mongocollection.php adreslerini inceleyebilirsiniz.

Share this post

Bir Cevap Yazın

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