MongoDB Java

環(huán)境配置

在 Java 程序中如果要使用 MongoDB,你需要確保已經(jīng)安裝了 Java 環(huán)境及 MongoDB JDBC 驅(qū)動(dòng)。

本章節(jié)實(shí)例適合 Mongo 3.x 以上版本。

你可以參考本站的Java教程來安裝Java程序。現(xiàn)在讓我們來檢測(cè)你是否安裝了 MongoDB JDBC 驅(qū)動(dòng)。

首先你必須下載mongo jar包,下載地址:https://mongodb.github.io/mongo-java-driver/, 請(qǐng)確保下載最新版本炕泳。

你需要將 mongo-java-driver-3.2.2.jar (找到合適的版本)包含在你的 classpath 中。上祈。

國內(nèi) mongodb-driver jar 下載地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

連接數(shù)據(jù)庫

連接數(shù)據(jù)庫培遵,你需要指定數(shù)據(jù)庫名稱,如果指定的數(shù)據(jù)庫不存在登刺,mongo會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫籽腕。

連接數(shù)據(jù)庫的Java代碼如下:

import com.mongodb.MongoClient;

import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{

? public static void main( String args[] ){

? ? ? try{?

? ? ? // 連接到 mongodb 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");?

? ? ? System.out.println("Connect to database successfully");


? ? ? }catch(Exception e){

? ? ? ? System.err.println( e.getClass().getName() + ": " + e.getMessage() );

? ? }

? }

}

現(xiàn)在,讓我們來編譯運(yùn)行程序并連接到數(shù)據(jù)庫 mycol纸俭。

你可以根據(jù)你的實(shí)際環(huán)境改變 MongoDB JDBC 驅(qū)動(dòng)的路徑皇耗。

本實(shí)例將 MongoDB JDBC 啟動(dòng)包 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

本實(shí)例中 Mongo 數(shù)據(jù)庫無需用戶名密碼驗(yàn)證。如果你的 Mongo 需要驗(yàn)證用戶名及密碼揍很,可以使用以下代碼:

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服務(wù) 如果是遠(yuǎn)程連接可以替換“l(fā)ocalhost”為服務(wù)器所在IP地址?

? ? ? ? ? ? //ServerAddress()兩個(gè)參數(shù)分別為 服務(wù)器地址 和 端口?

? ? ? ? ? ? ServerAddress serverAddress = new ServerAddress("localhost",27017);?

? ? ? ? ? ? List<ServerAddress> addrs = new ArrayList<ServerAddress>();?

? ? ? ? ? ? addrs.add(serverAddress);?


? ? ? ? ? ? //MongoCredential.createScramSha1Credential()三個(gè)參數(shù)分別為 用戶名 數(shù)據(jù)庫名稱 密碼?

? ? ? ? ? ? MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());?

? ? ? ? ? ? List<MongoCredential> credentials = new ArrayList<MongoCredential>();?

? ? ? ? ? ? credentials.add(credential);?


? ? ? ? ? ? //通過連接認(rèn)證獲取MongoDB連接?

? ? ? ? ? ? MongoClient mongoClient = new MongoClient(addrs,credentials);?


? ? ? ? ? ? //連接到數(shù)據(jù)庫?

? ? ? ? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");?

? ? ? ? ? ? System.out.println("Connect to database successfully");?

? ? ? ? } catch (Exception e) {?

? ? ? ? ? ? System.err.println( e.getClass().getName() + ": " + e.getMessage() );?

? ? ? ? }?

? ? }?

}

創(chuàng)建集合

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

代碼片段如下:

import com.mongodb.MongoClient;

import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{

? public static void main( String args[] ){

? ? ? try{?

? ? ? // 連接到 mongodb 服務(wù)

? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );



? ? ? // 連接到數(shù)據(jù)庫

? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");?

? ? ? System.out.println("Connect to database successfully");

? ? ? mongoDatabase.createCollection("test");

? ? ? System.out.println("集合創(chuàng)建成功");


? ? ? }catch(Exception e){

? ? ? ? System.err.println( e.getClass().getName() + ": " + e.getMessage() );

? ? }

? }

}

編譯運(yùn)行以上程序郎楼,輸出結(jié)果如下:

Connect to database successfully

集合創(chuàng)建成功

獲取集合

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

代碼片段如下:

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 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? 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() );

? ? }

? }

}

編譯運(yùn)行以上程序万伤,輸出結(jié)果如下:

Connect to database successfully

集合 test 選擇成功

插入文檔

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

代碼片段如下:

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 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");?

? ? ? ? System.out.println("Connect to database successfully");


? ? ? ? MongoCollection<Document> collection = mongoDatabase.getCollection("test");

? ? ? ? System.out.println("集合 test 選擇成功");

? ? ? ? //插入文檔?

? ? ? ? /**

? ? ? ? * 1. 創(chuàng)建文檔 org.bson.Document 參數(shù)為key-value的格式

? ? ? ? * 2. 創(chuàng)建文檔集合List<Document>

? ? ? ? * 3. 將文檔集合插入數(shù)據(jù)庫集合中 mongoCollection.insertMany(List<Document>) 插入單個(gè)文檔可以用 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() );

? ? ? }

? }

}

編譯運(yùn)行以上程序,輸出結(jié)果如下:

Connect to database successfully

集合 test 選擇成功

文檔插入成功

檢索所有文檔

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

此方法返回一個(gè)游標(biāo)敌买,所以你需要遍歷這個(gè)游標(biāo)。

代碼片段如下:

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 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? 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. 獲取游標(biāo)MongoCursor<Document>

? ? ? ? * 3. 通過游標(biāo)遍歷檢索出的文檔集合

? ? ? ? * */?

? ? ? ? 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() );

? ? ? }

? }

}

編譯運(yùn)行以上程序阶界,輸出結(jié)果如下:

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 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");?

? ? ? ? System.out.println("Connect to database successfully");


? ? ? ? MongoCollection<Document> collection = mongoDatabase.getCollection("test");

? ? ? ? System.out.println("集合 test 選擇成功");


? ? ? ? //更新文檔? 將文檔中l(wèi)ikes=100的文檔修改為likes=200?

? ? ? ? collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));?

? ? ? ? //檢索查看結(jié)果?

? ? ? ? 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() );

? ? ? }

? }

}

編譯運(yùn)行以上程序,輸出結(jié)果如下:

Connect to database successfully

集合 test 選擇成功

Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=200, by=Fly}}

刪除第一個(gè)文檔

要?jiǎng)h除集合中的第一個(gè)文檔膘融,首先你需要使用com.mongodb.DBCollection類中的 findOne()方法來獲取第一個(gè)文檔芙粱,然后使用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 服務(wù)

? ? ? ? MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

? ? ? ? // 連接到數(shù)據(jù)庫

? ? ? ? MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");?

? ? ? ? System.out.println("Connect to database successfully");

? ? ? ? MongoCollection<Document> collection = mongoDatabase.getCollection("test");

? ? ? ? System.out.println("集合 test 選擇成功");

? ? ? ? //刪除符合條件的第一個(gè)文檔?

? ? ? ? collection.deleteOne(Filters.eq("likes", 200));?

? ? ? ? //刪除所有符合條件的文檔?

? ? ? ? collection.deleteMany (Filters.eq("likes", 200));?

? ? ? ? //檢索查看結(jié)果?

? ? ? ? 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() );

? ? }

? }

}

編譯運(yùn)行以上程序氧映,輸出結(jié)果如下:

Connect to database successfully

集合 test 選擇成功



end

微信搜索:嘀嗒運(yùn)維

有驚喜春畔!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岛都,隨后出現(xiàn)的幾起案子拐迁,更是在濱河造成了極大的恐慌,老刑警劉巖疗绣,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铺韧,居然都是意外死亡多矮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門哈打,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塔逃,“玉大人,你說我怎么就攤上這事料仗⊥宓粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵立轧,是天一觀的道長格粪。 經(jīng)常有香客問我,道長氛改,這世上最難降的妖魔是什么帐萎? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮胜卤,結(jié)果婚禮上疆导,老公的妹妹穿的比我還像新娘。我一直安慰自己葛躏,他們只是感情好澈段,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布悠菜。 她就那樣靜靜地躺著,像睡著了一般败富。 火紅的嫁衣襯著肌膚如雪悔醋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天囤耳,我揣著相機(jī)與錄音篙顺,去河邊找鬼。 笑死充择,一個(gè)胖子當(dāng)著我的面吹牛德玫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播椎麦,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼宰僧,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了观挎?” 一聲冷哼從身側(cè)響起琴儿,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘁捷,沒想到半個(gè)月后造成,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雄嚣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年晒屎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓升。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鼓鲁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出港谊,到底是詐尸還是另有隱情骇吭,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布歧寺,位于F島的核電站燥狰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斜筐。R本人自食惡果不足惜碾局,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奴艾。 院中可真熱鬧净当,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忽冻,卻和暖如春真朗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僧诚。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工遮婶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人湖笨。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓旗扑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慈省。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臀防,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容