乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MongoDB的java版本驅(qū)動

       yetao_study 2015-05-13

      (1)建立連接

      建立一個mongodb的連接,至少應(yīng)該知道數(shù)據(jù)庫實例的名稱(不一定存在。如果不存在,會創(chuàng)建一個新的)

      此外,可以指定mongodb服務(wù)器的ip和端口,下面的代碼展現(xiàn)了三種不同的連接方式連接到mydb的數(shù)據(jù)庫實例上

      import com.mongodb.MongoClient;
      import com.mongodb.MongoException;
      import com.mongodb.WriteConcern;
      import com.mongodb.DB;
      import com.mongodb.DBCollection;
      import com.mongodb.BasicDBObject;
      import com.mongodb.DBObject;
      import com.mongodb.DBCursor;
      import com.mongodb.ServerAddress;
      
      import java.util.Arrays;
      
      // 方式一:直接連接單一mongodb服務(wù)器(注意這種方式不會自動發(fā)現(xiàn)mongodb集群中的主服務(wù)器)
      MongoClient mongoClient = new MongoClient();
      // 方式二(指定ip):
      MongoClient mongoClient = new MongoClient( "localhost" );
      // 方式二(指定ip、端口):
      MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
      // 方式三:連接到mongodb服務(wù)器集群(會自動發(fā)現(xiàn)主服務(wù)器)
      MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017),
                                            new ServerAddress("localhost", 27018),
                                            new ServerAddress("localhost", 27019)));
      
      DB db = mongoClient.getDB( "mydb" );

      在上面的代碼中,db代表了連接mongodb中的mydb數(shù)據(jù)庫實例的連接。通過它,可以進行進一步的操作。

      注:MongoClient的實例代表數(shù)據(jù)庫連接池,客戶端在多線程環(huán)境下也只需要一個實例,請訪問http://docs./ecosystem/drivers/java-concurrency/#java-driver-concurrency獲取更多信息

      MongoClient被設(shè)計成線程安全、可以被多線程共享的。通常訪問數(shù)據(jù)庫集群的應(yīng)用只需要一個實例。如果出于某些原因,你決定使用多個實例,請注意:

      所有資源使用限制(最大連接數(shù)等等)對每個MongoClient都適用

      銷毀一個實例時,請確認調(diào)用MongoClient.close()方法來清理資源

      MongoClient類最早從2.10.0版本引入,先前的版本請使用Mongo類

      注:mongodb安裝、啟動可以參考http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html

      (2)認證(可選)

      MongoDB可以運行在安全模式上。當運行在這個模式下時,任何客戶端應(yīng)用在執(zhí)行任何操作前必須提供用戶名、密碼。java客戶端示例代碼如下:

      MongoClient mongoClient = new MongoClient();
      DB db = mongoClient.getDB("test");
      boolean auth = db.authenticate(myUserName, myPassword);
      在上面的代碼中,如果用戶名密碼通過校驗,auth==true,否則auth=false。也可以查詢mongodb的日志。

      (3)獲取所有集合(集合類似于mysql中的表)

      每個數(shù)據(jù)庫實例有0個或者多個集合,通過db可以獲取到。

      Set<String> colls = db.getCollectionNames();
      
      for (String s : colls) {
          System.out.println(s);
      }

      如果數(shù)據(jù)庫中存在name、address兩個集合,會有如下輸出:

      name
      address

      (4)獲取單一集合

      調(diào)用db的getCollection(String collectionName)方法獲得單一集合

      DBCollection coll = db.getCollection("testCollection");

      獲取到集合對象后,就可以進行添加、查詢數(shù)據(jù)等操作。

      (5)設(shè)置 write concern

      2.10.0及以后版本,默認的write concern是WriteConcern.ACKNOWLEDGED。可以改變默認模式:

      mongoClient.setWriteConcern(WriteConcern.JOURNALED);

      write concern有很多選項。另外,默認模式可以在數(shù)據(jù)庫級別、集合級別甚至是單一操作級別進行更改。具體信息請查閱API文檔http://api./java/current/index.html

      2.10.0以前的版本,默認值是WriteConcern.NORMAL。一般情況,客戶端會改變這個值來保證寫入數(shù)據(jù)庫如果有問題可以被通知到。

      (6)增加文檔(類似向數(shù)據(jù)庫中增加一條記錄)

      一旦獲取集合對象coll,就可以插入一條文檔了。例如:插入下面json格式的文檔

      {
         "name" : "MongoDB",
         "type" : "database",
         "count" : 1,
         "info" : {
                     x : 203,
                     y : 102
                   }
      }

      注意上面存在嵌入的文檔。我們可以使用BasicDBObject類創(chuàng)建一個文檔(包括嵌入的文檔)。然后調(diào)用集合coll的插入方法

      BasicDBObject doc = new BasicDBObject("name", "MongoDB").
                                    append("type", "database").
                                    append("count", 1).
                                    append("info", new BasicDBObject("x", 203).append("y", 102));
      
      coll.insert(doc);

      (7)findOne()方法:查找集合中的第一個文檔

      通過調(diào)用findOne()方法可以獲得上一步中我們插入的文檔。方法的返回值返回一個單一的文檔(與DBCurse的find()方法不同)。當只存在唯一文檔或者只關(guān)心第一個文檔時非常有用。

      DBObject myDoc = coll.findOne();
      System.out.println(myDoc);

      控制臺輸出如下:

      { "_id" : "49902cde5162504500b45c2c" ,
        "name" : "MongoDB" ,
        "type" : "database" ,
        "count" : 1 ,
        "info" : { "x" : 203 , "y" : 102}}
      注意:_id元素是mongodb自動添加的。請牢記:_"/“$是mongodb的保留字,請勿使用。

      (8)添加多條文檔

      為了方便以后的查詢操作,現(xiàn)在向集合中增加多條文檔

      這些文檔的格式為:

      {
         "i" : value
      }
      通過一個循環(huán)添加文檔,具體如下:

      for (int i=0; i < 100; i++) {
          coll.insert(new BasicDBObject("i", i));
      }

      注意我們可以向一個集合插入不同格式的文檔。這就是mongodb模式自由的特性

      (8)查詢集合中文檔總個數(shù)

      目前,已經(jīng)向集合中插入101條文檔(100條是通過循環(huán)添加的,1條是單獨添加的)??梢哉{(diào)用getCount()方法查詢總個數(shù)

      System.out.println(coll.getCount());

      控制臺應(yīng)該輸出101

      (9)使用游標查詢所有文檔

      可以使用find()方法查詢集合中的所有文檔。方法返回一個DBCursor。這個對象可以遍歷查詢出的文檔集合。下面是查詢所有文檔并且輸出到控制臺的代碼片段

      DBCursor cursor = coll.find();
      try {
         while(cursor.hasNext()) {
             System.out.println(cursor.next());
         }
      } finally {
         cursor.close();
      }
      控制臺應(yīng)該輸出101行文檔信息。

      (10)查詢單一文檔

      通過向find()方法傳遞參數(shù)可以查詢到集合的一部分文檔集合。例如:查找i==71的文檔的代碼片段如下:

      BasicDBObject query = new BasicDBObject("i", 71);
      
      cursor = coll.find(query);
      
      try {
         while(cursor.hasNext()) {
             System.out.println(cursor.next());
         }
      } finally {
         cursor.close();
      }

      控制臺應(yīng)該只輸出一行:

      { "_id" : "49903677516250c1008d624e" , "i" : 71 }

      也許你在mongodb的文檔和示例代碼中看到過$操作符,例如:

      db.things.find({j: {$ne: 3}, k: {$gt: 10} });

      Java版本的客戶端將無區(qū)別的對待他們

      BasicDBObject query = new BasicDBObject("j", new BasicDBObject("$ne", 3)).
                                            append("k", new BasicDBObject("$gt", 10));
      
      cursor = coll.find(query);
      
      try {
         while(cursor.hasNext()) {
             System.out.println(cursor.next());
         }
      } finally {
         cursor.close();
      }

      (11)查詢多個文檔

      通過查詢可以獲取集合中的多個文檔。例如:查詢i>50的文檔:

      query = new BasicDBObject("i", new BasicDBObject("$gt", 50));  // e.g. find all where i > 50
      
      cursor = coll.find(query);
      
      try {
         while(cursor.hasNext()) {
             System.out.println(cursor.next());
         }
      } finally {
         cursor.close();
      }

      控制臺應(yīng)該打印出i>50的所有文檔

      查詢20<i<=30的文檔:

      query = new BasicDBObject("i", new BasicDBObject("$gt", 20).
                                                     append("$lte", 30));  // i.e.   20 < i <= 30
      cursor = coll.find(query);
      
      try {
         while(cursor.hasNext()) {
             System.out.println(cursor.next());
         }
      } finally {
         cursor.close();
      }

      一些管理相關(guān)的功能如下:

      (12)創(chuàng)建索引

      mongodb支持索引并且添加到集合中也非常方便。創(chuàng)建一個索引,需要指定被索引的字段以及索引方向(1代表升序、2代表降序)。

      為字段i添加索引:

      coll.createIndex(new BasicDBObject("i", 1));  // create index on "i", 升序

      (13)查詢集合上的索引

      示例代碼:

      List<DBObject> list = coll.getIndexInfo();
      
      for (DBObject o : list) {
         System.out.println(o);
      }

      控制臺應(yīng)該輸出:

      { "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} }

      (14)查詢所有數(shù)據(jù)庫實例名稱

      示例代碼如下:

      MongoClient mongoClient = new MongoClient();
      
      for (String s : mongoClient.getDatabaseNames()) {
         System.out.println(s);
      }

      (15)刪除數(shù)據(jù)庫實例

      示例代碼如下:

      MongoClient mongoClient = new MongoClient();
      mongoClient.dropDatabase("myDatabase");

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多