Java+MongoDB初探

1.準(zhǔn)備工作

項(xiàng)目使用maven搭建,所以首要的工作需要加入mongodb的依賴疫剃,這里mongo-java-driver使用的是3.3.0的版本性含,bson依賴是mongoDB提供的BSON操作工具。

<dependency>
       <groupId>org.mongodb</groupId>
       <artifactId>bson</artifactId>
      <version>3.3.0</version>
</dependency>
<dependency>
       <groupId>org.mongodb</groupId>
       <artifactId>mongo-java-driver</artifactId>
       <version>3.3.0</version>
</dependency>

2.實(shí)例代碼

代碼之中包括了常見的操作:增刪改查操作稽物。

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
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;
import org.bson.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by veione on 2016/12/3.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext.xml")
public class MongoDBTest {
    private static final Logger logger = LoggerFactory.getLogger(MongoDBTest.class);

    @Test
    public void testConnectMongoDB() {
        // 連接到 mongodb 服務(wù)
        MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);

        //連接到數(shù)據(jù)庫(kù)
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

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

        FindIterable<Document> findIterable=collection.find(new Document("id",9527));
        MongoCursor<Document> mongoCursor=findIterable.iterator();
        while (mongoCursor.hasNext()){
            logger.info(mongoCursor.next().toJson());
        }
        mongoClient.close();
    }

    /**
     * 連接需要密碼認(rèn)證的方式
     */
    @Test
    public void testNeedAuthConnectDB() {
        ServerAddress serverAddress = new ServerAddress("127.0.0.1", 27017);
        List<ServerAddress> adds = new ArrayList<ServerAddress>();
        adds.add(serverAddress);

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

        List<MongoCredential> credentials = new ArrayList<MongoCredential>();
        credentials.add(credential);

        //通過連接認(rèn)證獲取MongoDB連接
        MongoClient mongoClient = new MongoClient(adds, credentials);

        //連接到數(shù)據(jù)庫(kù)
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        System.out.println("connect to mongoDB successfully.");
        mongoClient.close();
    }

    @Test
    /**
     * 創(chuàng)建集合
     */
    public void testCreateCollection() {
        MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);

        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

        mongoDatabase.createCollection("goods");

        System.out.println("create collection successfully.");
        mongoClient.close();
    }


    /**
     * 插入文檔操作
     */
    @Test
    public void testInsertDocument() {
        // Connect to the mongoDB
        MongoClient mongoClient = new MongoClient("localhost", 27017);

        //連接到數(shù)據(jù)庫(kù)
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        logger.info("connect to mongoDB successfully.");

        //選擇集合對(duì)象
        MongoCollection<Document> collections = mongoDatabase.getCollection("customers");

        //插入文檔
        Document doc = new Document("title", "MongoDB")
                .append("description", "Nosql Database")
                .append("lke", 100)
                .append("by", "peter");
        List<Document> docs = new ArrayList<Document>();
        docs.add(doc);

        collections.insertMany(docs);
        logger.info("insert document successfully.");
        mongoClient.close();
    }

    /**
     * 檢索所有文檔
     */
    @Test
    public void testSearchAllDocuments() {
        MongoClient mongoClient = new MongoClient("localhost", 27017);

        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

        MongoCollection<Document> collections = mongoDatabase.getCollection("customers");

        /**
         * 檢索所有文檔
         *
         * 1.獲取迭代器FindIterable<Document>
         * 2.獲取游標(biāo)MongoCursor<Document>
         * 3.通過游標(biāo)遍歷檢索出文檔集合
         */
        FindIterable<Document> findIterable = collections.find();
        MongoCursor<Document> mongoCursor = findIterable.iterator();
        while (mongoCursor.hasNext()) {
            logger.info(mongoCursor.next().toJson());
        }
        mongoClient.close();
    }

    /**
     * 檢索單個(gè)文檔
     */
    @Test
    public void testSearchSingleDocument(){
        MongoClient mongoClient=new MongoClient("localhost",27017);

        MongoDatabase mongoDatabase=mongoClient.getDatabase("test");
        MongoCollection<Document> collections = mongoDatabase.getCollection("customers");


        FindIterable<Document> findIterable = collections.find(new Document("id",9527));
        MongoCursor<Document> mongoCursor = findIterable.iterator();
        while (mongoCursor.hasNext()) {
            logger.info(mongoCursor.next().toJson());
        }
        mongoClient.close();
    }

    /**
     * 更新文檔
     */
    @Test
    public void testUpdateDocument(){
        MongoClient mongoClient=new MongoClient("localhost",27017);

        MongoDatabase mongoDatabase=mongoClient.getDatabase("test");

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

        //更新文檔,將文檔中id=2的文檔修改為id=9527
        collection.updateMany(Filters.eq("id",2),new Document("$set",new Document("id",9527)));

        //查看結(jié)果
        FindIterable<Document> findIterable=collection.find();
        MongoCursor<Document> mongoCursor=findIterable.iterator();
        while(mongoCursor.hasNext()){
            logger.info(mongoCursor.next().toJson());
        }
        mongoClient.close();
    }

    /**
     * 刪除第一個(gè)文檔
     */
    @Test
    public void testRemoveDocument(){
        MongoClient mongoClient=new MongoClient("localhost",27017);

        MongoDatabase mongoDatabase=mongoClient.getDatabase("test");

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

        //刪除符合條件的第一個(gè)文檔
        collection.deleteOne(Filters.eq("like",2001));
        //刪除所有符合條件的文檔
        collection.deleteMany(Filters.eq("like",20001));
        //檢索查看結(jié)果
        FindIterable<Document> findIterable=collection.find();
        MongoCursor<Document> mongoCursor=findIterable.iterator();

        while (mongoCursor.hasNext()){
            logger.info(mongoCursor.next().toJson());
        }
        mongoClient.close();
    }
}

3.總結(jié)

使用Java對(duì)MongoDB小試牛刀了一番,MongoDB基于BSON的格式使用起來非常方便折欠,而且擴(kuò)展性好贝或,相對(duì)于關(guān)系型數(shù)據(jù)庫(kù)先定義表后存放數(shù)據(jù),MongoDB有更大的伸縮性锐秦,無須定義表的結(jié)構(gòu)咪奖,存儲(chǔ)數(shù)據(jù)直接創(chuàng)建集合插入數(shù)據(jù)到集合即可,簡(jiǎn)單高效酱床。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羊赵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扇谣,更是在濱河造成了極大的恐慌昧捷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐寨,死亡現(xiàn)場(chǎng)離奇詭異靡挥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸯绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門跋破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓶蝴,你說我怎么就攤上這事毒返。” “怎么了舷手?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拧簸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我聚霜,道長(zhǎng)狡恬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任蝎宇,我火速辦了婚禮弟劲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姥芥。我一直安慰自己兔乞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庸追,像睡著了一般霍骄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淡溯,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天读整,我揣著相機(jī)與錄音,去河邊找鬼咱娶。 笑死米间,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膘侮。 我是一名探鬼主播屈糊,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼琼了!你這毒婦竟也來了逻锐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤雕薪,失蹤者是張志新(化名)和其女友劉穎昧诱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹦哼,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳄哭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纲熏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妆丘。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖局劲,靈堂內(nèi)的尸體忽然破棺而出勺拣,到底是詐尸還是另有隱情,我是刑警寧澤鱼填,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布药有,位于F島的核電站,受9級(jí)特大地震影響苹丸,放射性物質(zhì)發(fā)生泄漏愤惰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一赘理、第九天 我趴在偏房一處隱蔽的房頂上張望宦言。 院中可真熱鬧,春花似錦商模、人聲如沸奠旺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽响疚。三九已至鄙信,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忿晕,已是汗流浹背装诡。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杏糙,地道東北人慎王。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宏侍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜀漆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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