MongoDB Java

来源:http://www.cnblogs.com/tartis/archive/2016/04/14/5391899.html
-Advertisement-
Play Games

環境配置 在 Java 程式中如果要使用 MongoDB,你需要確保已經安裝了 Java 環境及 MongoDB JDBC 驅動。 本章節實例時候 Mongo 3.x 以上版本。 你可以參考本站的Java教程來安裝Java程式。現在讓我們來檢測你是否安裝了 MongoDB JDBC 驅動。 首先你必 ...


環境配置

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

本章節實例時候 Mongo 3.x 以上版本。

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


連接資料庫

連接資料庫,你需要指定資料庫名稱,如果指定的資料庫不存在,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() );
     }
   }
}

現在,讓我們來編譯運行程式並連接到資料庫 test。

你可以根據你的實際環境改變 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() );
      }
   }
}

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

Collection mycol selected successfully
文檔插入成功

檢索所有文檔

我們可以使用 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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQLite的SQL語法 SQLite的SQL語法 SQLite庫可以解析大部分標準SQL語言。但它也省去了一些特性並且加入了一些自己的新特性。這篇文檔就是試圖描述那些SQLite支持/不支持的SQL語法的。查看關鍵字列表。 如下語法表格中,純文本用藍色粗體顯示。非終極符號為斜體紅色。作為語法一部分 ...
  • 官網上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,這個jar包含了phoenix4.6連接hbase1.1.2所有的依賴,真是包羅萬象(裡面竟然還包括了servlet)。如下圖: 如果把這個jar放入到工程中,必然與現有工程諸多jar產生衝突。 經查找資料... ...
  • 寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過 一段時間的編碼,系統如期上線,剛開始運行一切良好,後來隨著數據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的 一些問題。有意思的是,有一個存儲過程里,為了實現一個小的功能,寫了好多好多 ...
  • 介紹 本篇文章主要介紹在插入數據到表中遇到鍵重覆避免插入重覆值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下來就分別看看這三種方式的處理辦法。 IGNORE 使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE ...
  • 今天我們就來看一下資料庫的各種命令,以下命令全部是從CMD命令視窗下的命令行輸入指令,首先如果如果輸入mysql,系統提示“mysql不是內部命 令或外部命令。那麼這其實是環境變數沒有設置好的原因,例如我的mysql的安裝目錄是C:\news\mySql,則在環境變數中的系統變數PATH路 徑中輸入 ...
  • 看了很久博客園的博客,今天有點小衝動,寫一個小小分享,歡迎吐槽,O(∩_∩)O哈哈~ 背景: 微信活動小游戲開發,游戲中需要不斷的恢復體力值,體力相關數據都存儲在redis中。 需求: 1.當日首次登錄,增加全部體力值; 2.周期性增加定額體力值; 實現方案1(全量更新): 出於用戶量小、簡單的考慮 ...
  • 系統是cenos6.7 64位的,預設mysql5.7.11下載到/usr/local/src,安裝目錄在/app/local/mysql目錄下,mysql數據放置目錄/app/local/data。mysql從5.1後採用cmake方式編譯安裝,所以要先編譯安裝cmake工具,也可以採用yum方式 ...
  • Question: 初步理解多維資料庫和關係型資料庫都是表存儲,只不過是在多維數據集里叫做事實表、維表,做分析的話關係型資料庫也可以做到的呀?(書上說多維資料庫的查詢速度更快一點,可是為什麼會更快呢?)多維資料庫和關係型資料庫單單是查詢速度上更優嗎?還有會出於什麼考慮來建多維資料庫呢? Answer ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...