欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用MongoClient連接Mongodb問題

 更新時(shí)間:2024年05月20日 09:44:50   作者:Ryan_Wanghh  
這篇文章主要介紹了使用MongoClient連接Mongodb問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MongoClient連接Mongodb

使用

pom文件引入依賴

在pom文件中引入客服端依賴

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

配置相關(guān)信息

在無密碼情況下,使用MongoClient直接建立連接,僅需提供IP、端口信息。

MongoClient client = new MongoClient("127.0.0.1",27017);

在需要密碼的情況下,使用MongoCredential配置密碼信息,使用ServerAddress配置服務(wù)信息。

ServerAddress serverAddress = new ServerAddress("192.168.1.55", 27017);
MongoCredential mongoCredential = MongoCredential.createCredential("admin", "admin", "123456".toCharArray());
// 第一個(gè)"admin" 為賬號(hào),第二個(gè)"admin"為創(chuàng)建賬戶時(shí)的數(shù)據(jù)庫(kù)名稱,第三個(gè)參數(shù)為密碼
MongoClient mongoClient = new MongoClient(serverAddress,mongoCredential, MongoClientOptions.builder().build());
// MongoClientOptions 是連接的相關(guān)配置,類似數(shù)據(jù)庫(kù)連接池的相關(guān)配置,使用默認(rèn)即可

開啟連接,訪問數(shù)據(jù) 

調(diào)試運(yùn)行,檢查是否報(bào)錯(cuò),如果賬戶密碼都正確,提示鑒權(quán)失敗,可能是配置鑒權(quán)的第二個(gè)參數(shù)設(shè)置不對(duì)

import com.mongodb.*;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
 
/**
 * @author Ryan
 * @version 1.0
 * @date 2021/9/6
 */
public class MongoDemo {
 
    public static void main(String[] args) {
        ServerAddress serverAddress = new ServerAddress("192.168.1.55", 27017);
        MongoCredential mongoCredential = MongoCredential.createCredential("admin", "admin", "123456".toCharArray());
        MongoClient mongoClient = new MongoClient(serverAddress,mongoCredential, MongoClientOptions.builder().build());
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("survey");
        System.out.println(collection.find().first());
    }
}

運(yùn)行結(jié)果:

16:57:24.124 [cluster-ClusterId{value='6135d7f32719bd3878607cbd', description='null'}-192.168.1.55:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to  {type=STANDALONE, servers=[{address=192.168.1.55:27017, type=STANDALONE, roundTripTime=5.9 ms, state=CONNECTED}]
16:57:24.184 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:136}] to 192.168.1.55:27017
16:57:24.193 [main] DEBUG org.mongodb.driver.protocol.command - Sending command {find : BsonString{value='survey'}} to database test on connection [connectionId{localValue:2, serverValue:136}] to server 192.168.1.55:27017
16:57:24.200 [main] DEBUG org.mongodb.driver.protocol.command - Command execution completed
Document{{_id=6135b83698a8ae31e4cec754, name=a, date=Fri Feb 19 08:00:00 CST 2016, results=[Document{{product=abc, score=10.0}}, Document{{product=xyz, score=5.0}}]}}

mongodb java客戶端的使用,即MongoClient

Java 連接 MongoDB

MongoDB 提供了一系列的驅(qū)動(dòng)用于支持各種語(yǔ)言連接 mongodb 數(shù)據(jù)庫(kù),包括:Java,Python,C++,Scala,PHP 等,完整的驅(qū)動(dòng)列表:

https://docs.mongodb.com/manual/applications/drivers/index.html

其中對(duì)于 Java 提供了 mongo-java-driver 庫(kù)支持 Mongo JDBC 驅(qū)動(dòng),使用該驅(qū)動(dòng)只要在項(xiàng)目依賴中導(dǎo)入:org.mongodb:mongo-java-driver

如在使用 gradle 構(gòu)建的項(xiàng)目中,如下導(dǎo)入: 

compile 'org.mongodb:mongo-java-driver:3.6.3'

Mongo JDBC 驅(qū)動(dòng)文檔主頁(yè):http://mongodb.github.io/mongo-java-driver/;

可以在驅(qū)動(dòng)主頁(yè)查詢?cè)擈?qū)動(dòng)的詳細(xì)用法,一下示例基本使用,包括:數(shù)據(jù)庫(kù)連接、CURD 操作,使用版本為:mongodb 3.6,mongo-java-driver 3.6,不同版本的驅(qū)動(dòng)的 API 由一些差異,詳細(xì)請(qǐng)查詢驅(qū)動(dòng)文檔;

示例用的數(shù)據(jù)庫(kù)集合 testdb.blog 文檔示例如下: 

{
    "_id" : ObjectId("5a8d519a07c9086ee823f15d"),
    "title" : "Mysql Overview",
    "description" : "Musql is a RDBMS",
    "author" : "assad",
    "url" : "http://blog.assad.article/233",
    "tages" : [ "mysql", "RDBMS", "sql" ],
    "likes" : 200
}

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

1)無驗(yàn)證連接 

MongoClient mongoClient = new MongoClient("127.0.0.1",27017);
//或者使用 mongo uri
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://127.0.0.1:27017"));

2)驗(yàn)證連接 

String user = "assad";                   //用戶名
String database = "testdb";              //數(shù)據(jù)庫(kù)
char[] password = "123".toCharArray();   //密碼
?
MongoCredential credential = MongoCredential.createCredential(user,database,password);   //驗(yàn)證對(duì)象
MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false).build();     //連接操作對(duì)象
MongoClient mongoClient = new MongoClient(new ServerAddress("127.0.0.1",27017),credential,options);   //連接對(duì)象
?
//或者使用 mongo uri
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
其中 mongo uri 的驗(yàn)證連接格式如下:
mongodb://userName:password@host/?authSource=databaseName&ssh=true;

獲取數(shù)據(jù)庫(kù) & 集合 

//獲取指定數(shù)據(jù)庫(kù)對(duì)象
MongoDatabase db = mongoClient.getDatabase("testdb");
//獲取指定集合對(duì)象
MongoCollection<Document> blogs = db.getCollection("blog");
?
//列舉所有數(shù)據(jù)庫(kù)名稱
for(String dbName : blogs.listDatabaseNames()
    System.out.println(dbName);
    
//列舉指定數(shù)據(jù)庫(kù)中所有集合名稱
for(String colName: db.listCollectionNames())
    System.out.println(colName);

以下示例中,對(duì)于文檔結(jié)果的輸出都使用 Log4j2 進(jìn)行標(biāo)準(zhǔn)輸出;

select 查詢操作

1)查詢結(jié)果遍歷

在 MongoDB JDBC 中,會(huì)對(duì)查詢結(jié)果生成一個(gè) FindIterable<Document> 對(duì)象,可以通過獲取其迭代器對(duì)其進(jìn)行迭代,同時(shí)該對(duì)象也提供了 foreach  方法,通過傳入一個(gè) Block 對(duì)象,可以對(duì)結(jié)果進(jìn)行阻塞迭代; 

//數(shù)據(jù)庫(kù)連接
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
MongoCollection<Document> blogs = mongoClient.getDatabase("testdb").getCollection("blog");
?
//查詢所有文檔,遍歷輸出結(jié)果
for (Document document1 : blogs.find())
    log.debug(document1.toJson());
?
//查詢所有文檔,使用遍歷器遍歷結(jié)果
MongoCursor<Document> cursor = blogs.find().iterator();
while(cursor.hasNext())
    log.debug(cursor.next().toJson());
?
//查詢所有文檔,對(duì)所有結(jié)果使用阻塞回調(diào)方法
blogs.find().forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
?
//查詢所有文檔,獲取結(jié)果文檔中的 title 字段(string)、likes 字段(int32)、tags 字段(array)
blogs.find().forEach((Block<Document>) document ->{
    String title = document.getString("title");
    int likes = document.getInteger("likes");
    List<String> tags = (List<String>) document.get("tags");
    log.debug(title + " - " + likes + " - " + tags);
});

2)條件查詢

對(duì)于條件查詢,可以通過構(gòu)造一個(gè)個(gè)嵌套的 Document 對(duì)象,產(chǎn)生類似 mongodb 查詢語(yǔ)法的 Document 鏈來進(jìn)行查詢;或者使用 Filters 中的各種靜態(tài)方法(如 eq,lte等)來進(jìn)行函數(shù)式地查詢,MongoDB JDBC 已經(jīng)將絕大部分的 mongodb 查詢條件操作符封裝為函數(shù)式調(diào)用; 

//條件查詢: db.blog.find({"author":"assad"})
blogs.find(new Document("author","assad")).forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
?
blogs.find(eq("author","assad")).forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
?
?
//條件查詢: db.blog.find({"likes":{$gte:200,$lte:500}})
blogs.find(new Document("likes",new Document("$gte",200).append("$lte",500)))
        .forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
blogs.find(and(gte("likes",200), lte("likes",500)))
        .forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
?
//條件查詢:db.blog.find({"author":"assad","title":/mongodb*/i })
blogs.find(new Document("author","assad").append("title",new Document("$regex","mongodb*").append("$options","i")))
        .forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
blogs.find(and(eq("author","assad"), regex("title","mongodb*","i")))
        .forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});

3)查詢結(jié)果映射,排序,限制 

//映射操作, db.blog.find({"author:"assad""},{"title":1,"url":1,"likes":1,"_id":0})
blogs.find(new Document("author","assad"))
        .projection(new Document("title",1).append("url",1).append("likes",1).append("_id",0))
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });
blogs.find(eq("author","assad"))
        .projection(fields(include("title","url","likes"),excludeId()))
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });
?
//查詢排序、限制: db.blog.find().sort({"likes":1,"title":-1}).limit(5)
blogs.find()
        .sort(and(ascending("likes"),descending("title")))
        .limit(5)
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });
?
blogs.find()
        .sort(new Document("likes",1).append("title",-1))
        .limit(5)
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });

4)aggregate 數(shù)據(jù)聚合操作 

//數(shù)據(jù)聚合: db.blog.aggregate([ {$group:{_id:"$author",likes_count:{$sum:"$likes"}}} ])
blogs.aggregate(asList( group("$author",sum("likes_count","$likes")) ))
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });
?
//數(shù)據(jù)聚合: db.blog.aggregate([ {$group:{_id:"$author",likes_avg:{$avg:"$likes"}}}, {$match:{_id:"assad"}} ])
blogs.aggregate(asList(
            group("$author",avg("likes_avg","$likes")),
            match(eq("_id","assad")) ))
        .forEach((Block<Document>) document -> {
            log.debug(document.toJson());
        });

insert 插入操作 

//數(shù)據(jù)庫(kù)連接
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
MongoCollection<Document> blogs = mongoClient.getDatabase("testdb").getCollection("blog");
?
//插入一個(gè)文檔
Document doc = new Document("title","Mysql Overview")
        .append("description","Musql is a RDBMS")
        .append("author","assad")
        .append("url","http://blog.assad.article/233")
        .append("tages", Arrays.asList("mysql","RDBMS","sql"))
        .append("likes",100);
blogs.insertOne(doc);
?
//插入多個(gè)文檔
Document doc1 = new Document("title","DB2 Overview")
                .append("author","Alex");
Document doc2 = new Document("title","Redis Overview")
                .append("author","Orlda");
List<Document> docList = new ArrayList<>();
docList.add(doc1);
docList.add(doc2);
blogs.insertMany(docList);

?

update 操作 

//數(shù)據(jù)庫(kù)連接
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
MongoCollection<Document> blogs = mongoClient.getDatabase("testdb").getCollection("blog");
?
//更改第一條匹配條件的文檔記錄,對(duì)應(yīng) update(<query>,{muti:false}) 方法
blogs.updateOne(and(eq("author","assad"),eq("title","SqlLite Overview"))
        ,combine(set("author","assad_1"),set("likes",0)));
?
//更改所有匹配條件的文檔記錄,對(duì)應(yīng) update(<query>,{muti:true}) 方法
blogs.updateMany(lte("likes",300)
        , inc("likes",100));
?
?
//完全替換一條文檔記錄,對(duì)應(yīng) save() 方法
Document doc = new Document("title","Mysql Overview")
        .append("description","Musql is a RDBMS")
        .append("author","assad")
        .append("url","http://blog.assad.article/233")
        .append("tages", Arrays.asList("mysql","RDBMS","sql"))
        .append("likes",100);
blogs.replaceOne(eq("author","Alex"),doc);

?

delete 操作 

//數(shù)據(jù)庫(kù)連接
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
MongoCollection<Document> blogs = mongoClient.getDatabase("testdb").getCollection("blog");
?
//刪除第一條滿足查詢條件的文檔記錄,對(duì)應(yīng) delete(<query>,{justOne:true}) 方法
blogs.deleteOne(eq("author","Alex"));
?
//刪除所有滿足查詢條件的文檔記錄,對(duì)應(yīng) delete(<query>,{justOne:false}) 方法
blogs.deleteMany(gte("likes",900));

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot aspect通過@annotation進(jìn)行攔截的實(shí)例代碼詳解

    springboot aspect通過@annotation進(jìn)行攔截的實(shí)例代碼詳解

    這篇文章主要介紹了springboot aspect通過@annotation進(jìn)行攔截的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量

    微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量

    這篇文章主要介紹了微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring Boot之過濾器 Filter注入的方式解析

    Spring Boot之過濾器 Filter注入的方式解析

    這篇文章主要介紹了Spring Boot之過濾器 Filter注入的方式解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring?AOP?后置處理器使用方式

    Spring?AOP?后置處理器使用方式

    這篇文章主要介紹了Spring?AOP?后置處理器使用方式,文章圍繞主題相關(guān)內(nèi)容展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • java從命令行獲取數(shù)據(jù)的三種方式代碼實(shí)例

    java從命令行獲取數(shù)據(jù)的三種方式代碼實(shí)例

    這篇文章主要介紹了java從命令行獲取數(shù)據(jù)的三種方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot項(xiàng)目中獲取IP地址的實(shí)現(xiàn)示例

    SpringBoot項(xiàng)目中獲取IP地址的實(shí)現(xiàn)示例

    OkHttp是一個(gè)由Square開發(fā)的高效、現(xiàn)代的HTTP客戶端庫(kù),本文主要介紹了SpringBoot項(xiàng)目中獲取IP地址的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • java 多線程饑餓現(xiàn)象的問題解決方法

    java 多線程饑餓現(xiàn)象的問題解決方法

    這篇文章主要介紹了java 多線程饑餓現(xiàn)象的問題解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot項(xiàng)目如何打可執(zhí)行war包

    SpringBoot項(xiàng)目如何打可執(zhí)行war包

    最近小編做了一個(gè)springboot項(xiàng)目,最后需要打成war包在容器中部署,下面小編給大家分享下SpringBoot項(xiàng)目如何打可執(zhí)行war包,感興趣的朋友一起看看吧
    2020-04-04
  • java基礎(chǔ)--JDK SPI概述

    java基礎(chǔ)--JDK SPI概述

    SPI是一種服務(wù)發(fā)現(xiàn)機(jī)制,本文就SPI做了詳細(xì)概述,具有很好的參考價(jià)值,希望對(duì)小伙伴們有所幫助,感興趣的朋友一起來參考參考吧
    2021-08-08
  • 關(guān)于MyBatis各種SQL操作詳解

    關(guān)于MyBatis各種SQL操作詳解

    這篇文章主要介紹了關(guān)于MyBatis各種SQL操作詳解,MyBatis 是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義 SQL、存儲(chǔ)過程以及高級(jí)映射,需要的朋友可以參考下
    2023-05-05

最新評(píng)論