MongoDB Java

MongoDB Java

環境配置

在 Java 程式中如果要使用 MongoDB,你需要確保已經安裝了 Java 環境及 MongoDB JDBC 驅動。

本章節例項適合 Mongo 3.x 以上版本。

你可以參考本站的Java教程來安裝Java程式。現在讓我們來檢測你是否安裝了 MongoDB JDBC 驅動。

  • 首先你必須下載mongo jar包,下載地址:https://mongodb.github.io/mongo-java-driver/, 請確保下載最新版本。

  • 你需要將 mongo-java-driver-3.2.2.jar (找到合適的版本)包含在你的 classpath 中。。
  • 國內 mongodb-driver jar 下載地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

連線資料庫

連線資料庫,你需要指定資料庫名稱,如果指定的資料庫不存在,mongo會自動建立資料庫。

連線資料庫的Java程式碼如下:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
       // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
       
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
       System.out.println("Connect to database successfully");
        
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

現在,讓我們來編譯執行程式並連線到資料庫 mycol。

你可以根據你的實際環境改變 MongoDB JDBC 驅動的路徑。

本例項將 MongoDB JDBC 啟動包 mongo-java-driver-3.2.2.jar 放在本地目錄下:

$ javac -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC.java
$ java -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC
Connect to database successfully
Authentication: true

本例項中 Mongo 資料庫無需使用者名稱密碼驗證。如果你的 Mongo 需要驗證使用者名稱及密碼,可以使用以下程式碼:

import java.util.ArrayList;  
import java.util.List;  
import com.mongodb.MongoClient;  
import com.mongodb.MongoCredential;  
import com.mongodb.ServerAddress;  
import com.mongodb.client.MongoDatabase;  
  
public class MongoDBJDBC {  
    public static void main(String[] args){  
        try {  
            //連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址  
            //ServerAddress()兩個引數分別為 伺服器地址 和 埠  
            ServerAddress serverAddress = new ServerAddress("localhost",27017);  
            List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
            addrs.add(serverAddress);  
              
            //MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼  
            MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
            credentials.add(credential);  
              
            //通過連線認證獲取MongoDB連線  
            MongoClient mongoClient = new MongoClient(addrs,credentials);  
              
            //連線到資料庫  
            MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
            System.out.println("Connect to database successfully");  
        } catch (Exception e) {  
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
        }  
    }  
} 

建立集合

我們可以使用 com.mongodb.client.MongoDatabase 類中的createCollection()來建立集合

程式碼片段如下:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
      // 連線到 mongodb 服務
      MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
         
       
      // 連線到資料庫
      MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
      System.out.println("Connect to database successfully");
      mongoDatabase.createCollection("test");
      System.out.println("集合建立成功");
        
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合建立成功

獲取集合

我們可以使用com.mongodb.client.MongoDatabase類的 getCollection() 方法來獲取一個集合

程式碼片段如下:

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
       // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
       
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
       System.out.println("Connect to database successfully");
      
       MongoCollection<Document> collection = mongoDatabase.getCollection("test");
       System.out.println("集合 test 選擇成功");
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合 test 選擇成功

插入文件

我們可以使用com.mongodb.client.MongoCollection類的 insertMany() 方法來插入一個文件

程式碼片段如下:

import java.util.ArrayList;
import java.util.List;
import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
         
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 選擇成功");
         //插入文件  
         /** 
         * 1. 建立文件 org.bson.Document 引數為key-value的格式 
         * 2. 建立文件集合List<Document> 
         * 3. 將文件集合插入資料庫集合中 mongoCollection.insertMany(List<Document>) 插入單個文件可以用 mongoCollection.insertOne(Document) 
         * */
         Document document = new Document("title", "MongoDB").  
         append("description", "database").  
         append("likes", 100).  
         append("by", "Fly");  
         List<Document> documents = new ArrayList<Document>();  
         documents.add(document);  
         collection.insertMany(documents);  
         System.out.println("文件插入成功");  
      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合 test 選擇成功
文件插入成功

檢索所有文件

我們可以使用 com.mongodb.client.MongoCollection 類中的 find() 方法來獲取集合中的所有文件。

此方法返回一個遊標,所以你需要遍歷這個遊標。

程式碼片段如下:

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
         
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 選擇成功");
         
         //檢索所有文件  
         /** 
         * 1. 獲取迭代器FindIterable<Document> 
         * 2. 獲取遊標MongoCursor<Document> 
         * 3. 通過遊標遍歷檢索出的文件集合 
         * */  
         FindIterable<Document> findIterable = collection.find();  
         MongoCursor<Document> mongoCursor = findIterable.iterator();  
         while(mongoCursor.hasNext()){  
            System.out.println(mongoCursor.next());  
         }  
      
      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合 test 選擇成功
Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=100, by=Fly}}

更新文件

你可以使用 com.mongodb.client.MongoCollection 類中的 updateMany() 方法來更新集合中的文件。

程式碼片段如下:

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
         
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 選擇成功");
         
         //更新文件   將文件中likes=100的文件修改為likes=200   
         collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  
         //檢索檢視結果  
         FindIterable<Document> findIterable = collection.find();  
         MongoCursor<Document> mongoCursor = findIterable.iterator();  
         while(mongoCursor.hasNext()){  
            System.out.println(mongoCursor.next());  
         }  
      
      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合 test 選擇成功
Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=200, by=Fly}}

刪除第一個文件

要刪除集合中的第一個文件,首先你需要使用com.mongodb.DBCollection類中的 findOne()方法來獲取第一個文件,然後使用remove 方法刪除。

程式碼片段如下:

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 連線到 mongodb 服務
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");

         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 選擇成功");

         //刪除符合條件的第一個文件  
         collection.deleteOne(Filters.eq("likes", 200));  
         //刪除所有符合條件的文件  
         collection.deleteMany (Filters.eq("likes", 200));  
         //檢索檢視結果  
         FindIterable<Document> findIterable = collection.find();  
         MongoCursor<Document> mongoCursor = findIterable.iterator();  
         while(mongoCursor.hasNext()){  
           System.out.println(mongoCursor.next());  
         }  
           
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

編譯執行以上程式,輸出結果如下:

Connect to database successfully
集合 test 選擇成功

更多操作可以參考:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

參考文件:http://blog.csdn.net/ererfei/article/details/50857103