2020重新出發(fā),NOSQL坏怪,Java操作MongoDB數(shù)據(jù)庫(kù)

Java操作MongoDB數(shù)據(jù)庫(kù)

除了通過啟動(dòng) mongo 進(jìn)程進(jìn)如 Shell 環(huán)境訪問數(shù)據(jù)庫(kù)外贝润,MongoDB 還提供了其他基于編程語言的訪問數(shù)據(jù)庫(kù)方法。MongoDB 官方提供了 Java 和 Python 語言的驅(qū)動(dòng)包铝宵,利用這些驅(qū)動(dòng)包可使用多種編程方法來連接并操作 MongoDB 數(shù)據(jù)庫(kù)打掘。

介紹一下如何設(shè)置和使用 MongoDB JDBC 驅(qū)動(dòng)程序,通過 JDBC 實(shí)現(xiàn)與 MongoDB 服務(wù)端的通信功能,用戶可以在此基礎(chǔ)上進(jìn)行各種 Java 程序的開發(fā)尊蚁。

安裝 Java 語言驅(qū)動(dòng)包

1) Maven 方式

推薦使用 Maven 的方式管理 MongoDB 的相關(guān)依賴包唯绍,Maven 項(xiàng)目中只需導(dǎo)入如下 pom 依賴包即可:

<dependency>
    <groupld>org.mongodb</groupld>
    <artifactld>mongodb-driver</artifact1d>
    <version>3.4</version>
</dependency>
<dependency>
    <groupld>org.mongodb</groupld>
    <artifactld>bson</artifactId>
    <version>3.4</version>
</dependency>
<dependency>
    <groupld>org.mongodb</groupId>
    <artifactId>Mongodb-driver-core</artifactld>
    <version>3.4</version>
</dependency>

2) 手動(dòng)導(dǎo)入

如果手動(dòng)下載 mongodb-driver,還必須下載其依賴項(xiàng) bson 和 mongodb-driver-core枝誊。在這里需要注意的是况芒,這三個(gè)安裝包需要配合使用,并且版本必須一致叶撒,否則運(yùn)行時(shí)會(huì)報(bào)錯(cuò)绝骚。

首先安裝 MongoDB,本節(jié)實(shí)例為 MongoDB 3.4.2 版本祠够;然后安裝 Java 開發(fā)工具压汪,本節(jié)采用 Eclipse 開發(fā)工具。通過 Github 網(wǎng)站下載驅(qū)動(dòng)包古瓤,分別為 mongodb-driver-3.4.2.jar止剖、mongodb-driver-core-3.4.2.jar、bson-3.4.2.jar落君。

編程實(shí)現(xiàn)

1) import 基礎(chǔ)類庫(kù)

若要完成 MongoDB 的增穿香、刪、改绎速、查等操作皮获,則需要導(dǎo)入很多類庫(kù)。

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

可以根據(jù)編程需要添加必要的類庫(kù)纹冤。

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

若要連接數(shù)據(jù)庫(kù)洒宝,則需要指定數(shù)據(jù)庫(kù)名稱。如果數(shù)據(jù)庫(kù)不存在萌京,則 MongoDB 會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)雁歌。如下代碼實(shí)現(xiàn)了簡(jiǎn)易的數(shù)據(jù)庫(kù)連接:

public class App {
    public static void main(String[] args) {
        try {
            //連接MongoDB服務(wù)器,端口號(hào)為27017
            MongoClient mongoClient = new MongoClient("localhost", 27017);
            //連接數(shù)據(jù)庫(kù)
            MongoDatabase mDatabase = mongoClient.getDatabase("test");  //test可選
            System.out.printin("Connect to database successfully!");
            System.out.printIn("MongoDatabase inof is : "+mDatabase.getName());
        } catch (Exception e) {
            System.err.printIn(e.getClass().getName() + ": " + e.getMessage());
        }
    }
}

3) 切換至集合

連接至具體數(shù)據(jù)庫(kù)以后知残,使用以下代碼切換到集合靠瞎,如果集合不存在,則使用如下代碼新建集合:

MongoCollection collection = database.getCollection("myTestCollection");

4) 插入文檔

切換至集合后橡庞,就可以進(jìn)行文檔的增较坛、刪、改扒最、查操作丑勤。首先定義文檔,并使用 append吧趣。方法追加內(nèi)容法竞,代碼如下:

Document document = new Document("_id", 1999)
                    .append("title", "MongoDB Insert Demo")
                    .append("description","database")
                    .append("likes", 30)
                    .append("by", "demo point")
                    .append("url", "http://c.biancheng.net/mongodb/");

document 為 BSON 類型的文檔耙厚,實(shí)際上為一個(gè)列表,每項(xiàng)有兩個(gè)元素岔霸,即字段名和值薛躬。

文檔定義完成后,再使用 insertOne 方法將此文檔插入集合:

collection.insertOne(document);

如果插入多條數(shù)據(jù)呆细,需要先定義一個(gè) Document 列表型宝,然后用 add() 方法添加多個(gè) Document 元素,最后用 insertMany() 方法插入絮爷,代碼如下:

List<Document> documents = new ArrayList<Document>();documents.add(document1);collection.insertMany(documents);

5) 刪除文檔

使用 delete() 方法刪除一個(gè)或多個(gè)文檔趴酣,代碼如下:

collection.deleteOne(document);collection.deleteMany(new Document ("likes", 30));

6) 更新數(shù)據(jù)

使用 updataOne() 方法更新一條數(shù)據(jù)或多個(gè)數(shù)據(jù),代碼如下:

collection.updataOne (eq ("likes", 30), new Document ("$set", new Document ("likes", 50)));java

updateOne() 方法中有兩個(gè)參數(shù)坑夯,第一個(gè)參數(shù)表示更新的內(nèi)容等于 ("likes",30) 的文檔岖寞,第二個(gè)參數(shù)為要修改的內(nèi)容,使用 $set 參數(shù)修改當(dāng)前值柜蜈,修改的內(nèi)容為 ("likes", 50)仗谆。

7) 查詢數(shù)據(jù)

利用游標(biāo)類型實(shí)現(xiàn)數(shù)據(jù)的查詢和遍歷顯示,使用游標(biāo)前需要 import MongoCursor 類庫(kù)淑履。

import com.mongodb.client.MongoCursor;
document Doc = (Document)collection.find(eq("likes", 30)).iterator();
MongoCursor<Document> cursor =collection.find().iterator();
try{
    while (cursor.hasNext()){
        System.out.printin(cursor.next().toJson());
    }
} finally{
    Cursor.close();
}

設(shè)置 find() 方法的參數(shù)為查詢條件隶垮,參數(shù)為比較的 Document 元素。

8) 其他方法

刪除數(shù)據(jù)庫(kù)或集合鳖谈,代碼如下:

mDatabase.drop();collection.drop();

關(guān)閉客戶端連接岁疼,代碼如下:

mongoClient.close();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缆娃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑰排,老刑警劉巖贯要,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異椭住,居然都是意外死亡崇渗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門京郑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宅广,“玉大人,你說我怎么就攤上這事些举「” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵户魏,是天一觀的道長(zhǎng)驶臊。 經(jīng)常有香客問我挪挤,道長(zhǎng),這世上最難降的妖魔是什么关翎? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任扛门,我火速辦了婚禮,結(jié)果婚禮上纵寝,老公的妹妹穿的比我還像新娘论寨。我一直安慰自己,他們只是感情好爽茴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布政基。 她就那樣靜靜地躺著,像睡著了一般闹啦。 火紅的嫁衣襯著肌膚如雪沮明。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天窍奋,我揣著相機(jī)與錄音荐健,去河邊找鬼。 笑死琳袄,一個(gè)胖子當(dāng)著我的面吹牛江场,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窖逗,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼址否,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了碎紊?” 一聲冷哼從身側(cè)響起佑附,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仗考,沒想到半個(gè)月后音同,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秃嗜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年权均,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅锨。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叽赊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出必搞,到底是詐尸還是另有隱情必指,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布顾画,位于F島的核電站取劫,受9級(jí)特大地震影響匆笤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谱邪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一炮捧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惦银,春花似錦咆课、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至迅栅,卻和暖如春殊校,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背读存。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工为流, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人让簿。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓敬察,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尔当。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莲祸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359