MongoDB JDBC 基本使用__MongoDB

來源:互聯網
上載者:User
MongoDB 入門專欄

http://blog.csdn.net/column/details/19681.html


Java 串連 MongoDB
MongoDB 提供了一系列的驅動用於支援各種語言串連 mongodb 資料庫,包括:Java,Python,C++,Scala,PHP 等,完整的驅動列表: https://docs.mongodb.com/manual/applications/drivers/index.html

其中對於 Java 提供了 mongo-java-driver 庫支援 Mongo JDBC  驅動,使用該驅動只要在項目依賴中匯入: org.mongodb:mongo-java-driver 如在使用 gradle 構建的項目中,如下匯入:
 

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

Mongo JDBC 驅動文檔首頁: http://mongodb.github.io/mongo-java-driver/;
可以在驅動首頁查詢該驅動的詳細用法,一下樣本基本使用,包括:資料庫連接、CURD 操作,使用版本為:mongodb 3.6,mongo-java-driver 3.6, 不同版本的驅動的 API 由一些差異,詳細請查詢驅動文檔;
樣本用的資料庫集合 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
}


資料庫連接 1)無驗證串連  
MongoClient mongoClient = new MongoClient("127.0.0.1",27017);
//或者使用 mongo uri
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://127.0.0.1:27017"));
2)驗證串連
 
String user = "assad";                   //使用者名稱
String database = "testdb";              //資料庫
char[] password = "123".toCharArray();   //密碼
 
MongoCredential credential = MongoCredential.createCredential(user,database,password);   //驗證對象
MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false).build();     //串連操作對象
MongoClient mongoClient = new MongoClient(new ServerAddress("127.0.0.1",27017),credential,options);   //連線物件
 
//或者使用 mongo uri
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://assad:123@127.0.0.1:27017/?authSource=testdb&ssl=false"));
其中 mongo uri 的驗證串連格式如下: mongodb://userName:password@host/?authSource=databaseName&ssh=true;

擷取資料庫 & 集合
 
//擷取指定資料庫物件
MongoDatabase db = mongoClient.getDatabase("testdb");
//擷取指定集合對象
MongoCollection<Document> blogs = db.getCollection("blog");
 
//列舉所有資料庫名稱
for(String dbName : blogs.listDatabaseNames()
    System.out.println(dbName);
    
//列舉指定資料庫中所有集合名稱
for(String colName: db.listCollectionNames())
    System.out.println(colName);

以下樣本中,對於文檔結果的輸出都使用 Log4j2 進行標準輸出;

select 查詢操作
1)查詢結果遍曆 在 MongoDB JDBC 中,會對查詢結果產生一個 FindIterable<Document> 對象,可以通過擷取其迭代器對其進行迭代,同時該對象也提供了 foreach  方法,通過傳入一個 Block 對象,可以對結果進行阻塞迭代;  
//資料庫連接
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");
 
//查詢所有文檔,遍曆輸出結果
for (Document document1 : blogs.find())
    log.debug(document1.toJson());
 
//查詢所有文檔,使用遍曆器遍曆結果
MongoCursor<Document> cursor = blogs.find().iterator();
while(cursor.hasNext())
    log.debug(cursor.next().toJson());
 
//查詢所有文檔,對所有結果使用阻塞回調方法
blogs.find().forEach((Block<Document>) document -> {
    log.debug(document.toJson());
});
 
//查詢所有文檔,擷取結果文檔中的 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)條件查詢 對於條件查詢,可以通過構造一個個嵌套的 Document 對象,產生類似 mongodb 查詢文法的 Document 鏈來進行查詢;或者使用 Filters 中的各種靜態方法(如 eq,lte等)來進行函數式地查詢,MongoDB JDBC 已經將絕大部分的 mongodb 查詢條件操作符封裝為函數式調用;  
//條件查詢: 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",
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.