Java ile MongoDB Kullanımı

MongoDB, 10Gen isimli şirket tarafından geliştirilen NoSQL veritabanıdır. Tamamen ücretsiz ve açık kaynak kodludur. Performans olarak ilişkili veritabanlarından daha hızlı olduğı kanıtlanmıştır. İçeriği önemli olmayan sektörlerde kullanılması tavsiye edilmektedir. Bankacılık veya devlete ait kurumsal bilgilerde kullanılması pek tavsiye edilmemektedir. Anlık olarak çok fazla işlem yapılması gerektiğinde veya önbellek kullanılmak istendiğinde tercih edilebilir. Önemli birçok uygulamada MongoDB kullanıldığı bilinmektedir. Makalemizde aşağıda bulunan maddeler sırasıyla anlatılacaktır:
  1. Java/MongoDB Sürücü Kurulumu
  2. MongoDB Bağlantısı Kurmak
  3. MongoDB ile Kayıtları Listelemek
  4. MongoDB ile Kayıt Eklemek
  5. MongoDB ile Kayıt Güncelemek
  6. MongoDB ile Kayıt Silmek
  7. MongoDB ile Collection Silmek
  8. MongoDB ile Veritabanı Silmek
1. Java/MongoDB Sürücü Kurulumu:
MongoDB sunucusuna bağlanabilmek için java diline ait mongoDB sürücüsünü yüklemeniz gerekmektedir. Hem Linux hem Windows tabanlı sistemlerde, http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ linkinden jar dosyasını indirip projenize ekleyebilirsiniz. Ayrıca Maven destekli olan projenize aşağıda bulunan kodlamayla gerekli jar dosyasını ekleyebilirsiniz:
  1. <dependency>
        <groupId>org.mongodb</groupId> 
        <artifactId>mongo-java-driver</artifactId> 
        <version>2.12.4</version> 
    </dependency>
Yukarıda bulunan kod parçasında görüldüğü üzere jar dosyası en son olarak 2.12.4 versiyonunda bulunmaktadır.  
 
2. MongoDB Bağlantısı Kurmak:
MongoDB sürücüsünü projenize eklemenizin ardından artık bağlantı işlemlerine başlayabiliriz. Normalde mongoDB kurulumunda bağlantı için authentication gerekmemektedir. Yani sistem kimlik doğrulama özelliği olmadan kurulmaktadır. Ancak sonrasında istenilirse kullanıcı tarafından username, password ile sisteme erişim sağlanabilir. Ayrıca MongoDB default host olarak localhost, default port olarak ise 27017 portunu kullanmaktadır. Aşağıda bulunan komutla MongoDB ye örnek bir bağlantı oluşturalım:
  1. MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB database = mongoClient.getDB("yazilimdersi_db");
Eğer authentication özelliğini aktif hale getirdiyseniz, aşağıdaki şekilde mongoDB'ye bağlantı sağlayabilirsiniz:
  1. MongoCredential credential = MongoCredential.createCredential("kullanıcıadı", "mongodb", "şifre".toCharArray());
    MongoClient mongoClient = new MongoClient(new ServerAddress("localhost"), Arrays.asList(credential));
    DB database = mongoClient.getDB("yazilimdersi_db");
3. MongoDB ile Kayıtları Listelemek:
MongoDB bağlantısının ardından artık collectionları inceleyebiliriz. Collectionlar, mongoDB'nin odacıkları olarak isimlendirilebilir. MySQL de tablo yapısına karşılık gelmektedir ve veriler bu hücrelerde tutulmaktadır. En önemli özelliği MySQLde bulunan tablosundan farklı olarak alan ad tanımlanmasının zorunlu olmamasıdır. Ayrıca ortak şema gereksinimi de bulunmamaktadır. Veriler bu collectionlar içerisinde json olarak tutulmaktadır. Aşağıda bulunan kodlama ile belirlediğimiz herhangi bir collectiona bağlanalım. Sonrasında bu collectiona örnek data ekleyelim.
  1. #ulkeler isimli collectiona bağlantı gerçekleştirelim.
    DBCollection col = database.getCollection("ulkeler");
    
    #bu collectiona örnek kayıt atalım.
    BasicDBObject obj = new BasicDBObject() 
            .append("id", 1) 
            .append("ulke", "Brezilya") 
            .append("ulkenufusu", 1000000); 
    WriteResult result = col.insert(obj, WriteConcern.JOURNAL_SAFE);
    
Yukarıda yapılan kodlama ile örnek kayıtlar ulkeler collectiona eklendi. Bu kayıtlara ait tüm sayıya ulaşmak için count() metodu kullanılmaktadır: 
  1. #kayıtlı ulke sayısını yazalım.
    System.out.println("kayıtlı ulke sayısı : ".$col->count());
    
Collectionlara eklenmiş olan tüm kayıtların listelenmesi için find() komutu kullanılmaktadır. Aşağıda bulunan kodlama ile kayıtlı olan tüm ulkelerin adını ve nufus sayısını görüntüleyebilirsiniz:
  1. import com.mongodb.MongoClient; 
    import com.mongodb.DBCollection; 
    import com.mongodb.DB; 
    import com.mongodb.BasicDBObject; 
    import com.mongodb.DBCursor; 
    import java.net.UnknownHostException; 
    
    public class MongoDBClass 
    { 
        public static void main(String[] args) { 
            try { 
                MongoClient mongo = new MongoClient("localhost"); 
                DB db = mongo.getDB("yazilimdersi_db"); 
                DBCollection dbcol = db.getCollection("ulkeler"); 
                DBCursor result = dbcol.find(); 
                while (result.hasNext()) { 
                    System.out.println(result.next()); 
                } 
            } catch(UnknownHostException e) { 
                System.out.println("Sunucu Hatası!"); 
            } 
        } 
    }
Yukarıda bulunan kodlama ile ulkeler collectiona ait tüm kayıtları çekip, listeledik. Eğer sadece nüfusu=1000 olan ülkeleri listelemek gibi bir özellik istiyorsanız find() metoduna koşulunuzu yazabilirsiniz. Örnek olarak aşağıda bulunan komut ile sadece nüfusu=1000 olan dilleri listeleyelim: 
  1. import com.mongodb.MongoClient; 
    import com.mongodb.DBCollection; 
    import com.mongodb.DB; 
    import com.mongodb.BasicDBObject; 
    import com.mongodb.DBCursor; 
    import java.net.UnknownHostException; 
    
    public class MongoDBClass 
    { 
        public static void main(String[] args) { 
            try { 
                MongoClient mongo = new MongoClient("localhost"); 
                DB db = mongo.getDB("yazilimdersi_db"); 
                DBCollection dbcol = db.getCollection("ulkeler"); 
                DBCursor result = dbcol.find("{ulkenufusu: 1000}"); 
                while (result.hasNext()) { 
                    System.out.println(result.next()); 
                } 
            } catch(UnknownHostException e) { 
                System.out.println("Sunucu Hatası!"); 
            } 
        } 
    }
Aşağıda yukarıdaki kodun çıktısı bulunmaktadır: 
  1. { "_id" : { "$oid" : "4fc68190a09ef7490a0b3b40"} , "ulke" : "Brezilya" , "ulkenufusu" : "100000"}
Eğer sadece bir kayıt çekmek istiyorsanız find() yerine findOne() metodunu kullanmanız yeterlidir.

4. MongoDB ile Kayıt Eklemek:
Yukarıdaki maddeler collectiona nasıl kayıt atıldığı ile alakalı örnek verdim. Ancak burada biraz daha detaylı olarak size sistemin nasıl çalıştığını anlatacağım. Collectionlara kayıt eklenirken insert() metodu kullanılmaktadır ve içerikler array olarak girilmektedir. Konuyla alakalı örnek kodlama şu şekildedir:
  1. import com.mongodb.MongoClient; 
    import com.mongodb.DBCollection; 
    import com.mongodb.DB; 
    import com.mongodb.BasicDBObject; 
    import com.mongodb.WriteResult; 
    import java.net.UnknownHostException; 
    import java.util.Date; 
    
    public class MongoDBClass
    { 
        public static void main(String[] args) { 
            Date date = new Date(); 
            try { 
                MongoClient mongo = new MongoClient("localhost"); 
                DB db = mongo.getDB("ornekdb"); 
                DBCollection dbcol = db.getCollection("kullanicilar"); 
                BasicDBObject obj = new BasicDBObject() 
                            .append("id", "1") 
                            .append("kullanici", "test user") 
                            .append("sifre", "1q2w3e") 
                            .append("date", date.getTime()); 
    
                WriteResult result = dbcol.insert(obj, WriteConcern.JOURNAL_SAFE); 
                System.out.println(result); 
            } catch(UnknownHostException e) { 
                System.out.println("Sunucu Hatası!"); 
            } 
        } 
    }
5. MongoDB ile Kayıt Güncellemek:
Collectionlarda mevcut herhangi bir kaydın güncellenmesinde ise $set ve update() keywordleri önemli bir yer tutmaktadır.Aşağıdaki kodlamada collectionlarda bulunan herhangi bir kaydın nasıl güncellediği ile alakalı örnek kodlama bulunmaktadır:
  1. import com.mongodb.MongoClient; 
    import com.mongodb.DBCollection; 
    import com.mongodb.DB; 
    import com.mongodb.BasicDBObject; 
    import com.mongodb.WriteResult; 
    import java.net.UnknownHostException; 
    import java.util.Date; 
    
    public class MongoDBClass
    { 
        public static void main(String[] args) { 
            Date date = new Date(); 
            try { 
                MongoClient mongo = new MongoClient("localhost"); 
                DB db = mongo.getDB("ornekdb"); 
                DBCollection dbcol = db.getCollection("kullanicilar"); 
                BasicDBObject obj = new BasicDBObject() 
                            .append("id", "1") 
                            .append("kullanici", "test user2") 
                            .append("sifre", "1q2w3e") 
                            .append("date", date.getTime()); 
    
                WriteResult result = _dbcol.update( 
                new BasicDBObject("kullanici", "test user"), 
                new BasicDBObject("$set", obj) 
                ); 
             
                if (result.getLastError().ok()) { 
                    System.out.println("Güncelleme başarılı"); 
                } else { 
                    System.out.println("Hata mesajı : " + result.getLastError().getErrorMessage()); 
                }
            } catch(UnknownHostException e) { 
                System.out.println("Sunucu Hatası!"); 
            } 
        } 
    }
6. MongoDB ile Kayıt Silmek:
Aşağıdaki kodlamada collectionlarda bulunan herhangi bir kaydın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak remove() metodu kullanılmaktadır:
  1. BasicDBObject document = new BasicDBObject(); 
    document.put("number", 2);
    collection.remove(document);
Yukarıda bulunan komutla birlikte 2 numaralı kayıt collection içerisinde silinecektir.

7. MongoDB ile Collection Silmek:
Aşağıdaki kodlamada mevcut collectionın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak drop() metodu kullanılmaktadır:
  1. #silinecek collectionun belirleyelim.
    collection.drop();
    
8. MongoDB ile Veritabanı Silmek:
Aşağıdaki kodlamada veritabanın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak dropDatabase() metodu kullanılmaktadır:
  1. #veritabanı silinecektir.
    db.dropDatabase();

comments powered by Disqus