首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 操作 MongoDB 完整實戰指南:從連線到進階查詢

     編輯:Java 相關知識

前言

MongoDB 作為當前最流行的 NoSQL 資料庫之一,以其靈活的文檔模型和強大的查詢功能深受開發者喜愛。本文將通過完整的 Java 代碼示例,詳細講解如何使用 Java 驅動程式操作 MongoDB,涵蓋連線配置、基本 CRUD 操作、條件查詢、陣列處理等核心場景。

環境準備與基礎連線

首先需要引入 MongoDB Java 驅動依賴(本文示例基於 2.x 版本 API)。建立連線時需指定主機地址和端口,預設端口為 27017。連線成功後可獲取資料庫實例,並列出所有集合名稱以驗證連線狀態。

Mongo mongo = new Mongo("172.27.9.104", 27017);
DB db = mongo.getDB("mytestdb");
Set<String> cols = db.getCollectionNames();
for (String s : cols) {
    System.out.println(s);
}

文檔的插入與基本查詢

MongoDB 使用 BasicDBObject 表示文檔,支援嵌套結構。插入數據後可通過 findOne() 快速驗證,或使用游標遍歷所有文檔。

DBCollection collection = db.getCollection("mytestcoll");
collection.drop(); // 清空舊數據

BasicDBObject doc = new BasicDBObject();
doc.put("from", "blog.ithomer.net");
doc.put("to", "forum.ithomer.net");
doc.put("subject", "ithomer.net");
collection.insert(doc);

DBObject dbobj = collection.findOne();
System.out.println(dbobj);

批量插入與條件查詢進階

通過循環批量插入測試數據,演示計數統計、全表掃描、精確匹配、範圍查詢($gte、$lt)等常用操作。範圍查詢構建時需注意運算符嵌套順序。

for (int i = 0; i < 10; i++) {
    collection.insert(new BasicDBObject().append("ranking", i));
}
System.out.println("count: " + collection.getCount());

// 全表遍歷
DBCursor cursor = collection.find();
while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

// 精確查詢 ranking=1
BasicDBObject query = new BasicDBObject("ranking", 1);
cursor = collection.find(query);

// 範圍查詢 5 <= ranking < 9
query = new BasicDBObject("ranking", 
    new BasicDBObject("$gte", 5).append("$lt", 9));
cursor = collection.find(query);

複雜陣列結構處理實戰

實際項目中常遇到包含陣列、嵌套對象的複雜文檔。以下示例展示如何解析包含標籤、關鍵字、演員、導演、版權等多維陣列的媒體數據,並關聯映射表獲取整數 ID。

@SuppressWarnings("unchecked")
public static void loadMediaTags(List<MediaEntity> mediaEntityList) {
    mediaEntityList.clear();
    try {
        Mongo mongo = new Mongo(CosineCluster.gMongo_HOST, CosineCluster.gMongo_PORT);
        DB db = mongo.getDB(CosineCluster.gMongo_DB);
        DBCollection collection = db.getCollection(CosineCluster.gMongo_Coll_Media);
        
        DBCursor cursor = collection.find();
        int index = 0;
        long startTime = System.currentTimeMillis();
        
        while(cursor.hasNext()){
            BasicDBObject obj = (BasicDBObject) cursor.next();
            
            long id = obj.getLong("_id");
            ArrayList<String> tagList = (ArrayList<String>) obj.get("tag");
            ArrayList<String> keywordList = (ArrayList<String>)obj.get("keyword");
            ArrayList<Integer> copyrightList = (ArrayList<Integer>)obj.get("copyright");
            
            MediaEntity mediaEntity = new MediaEntity();
            mediaEntity.setId(id);
            
            // 處理標籤陣列
            for(int j=0; j 100) break;
            System.out.println(index + " --- mediaEntity : " + mediaEntity.toString());
        }
        
        long costTime = System.currentTimeMillis() - startTime;
        System.out.println("load data costTime = " + index + "; costTime = " + costTime/1000f);
        
    } catch (Exception e) {
        e.printStackTrace();
    }
}

映射表查詢優化建議

注意:示例中的 getTagInt、getActorInt 等方法每次查詢都會建立新連線,生產環境強烈建議使用連線池並批量查詢映射關係,避免頻繁建立連線造成效能瓶頸。

執行結果分析

程式執行後將輸出集合名稱、插入文檔詳情、總筆數、全表數據、精確查詢結果、範圍查詢結果等完整日誌,便於驗證各操作正確性。

最佳實踐總結

  • 生產環境請升級至 MongoDB Java Driver 3.x/4.x 版本,使用 MongoClient 替代已棄用的 Mongo 類
  • 善用索引優化查詢效能,特別是範圍查詢和排序字段
  • 批量操作時使用 BulkWrite API 提升吞吐量
  • 妥善處理連線生命週期,採用 try-with-resources 確保資源釋放
  • 複雜文檔解析時注意類型轉換安全性,建議加入非空判斷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved