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

Java 操作 MongoDB 入門實戰:從核心概念到驅動開發

     編輯:Java 相關知識

前言

MongoDB 作為文檔型 NoSQL 數據庫,以靈活 Schema、高寫入性能著稱。本文對比關係型術語,實戰演示 Java 驅動 CRUD 操作。

核心概念對照表

MySQLMongoDB說明
databasedatabase (db)邏輯命名空間
tablecollection文檔容器,無固定 Schema
rowdocumentBSON 格式 (二進制 JSON)
columnfield鍵值對,支持嵌套/數組
primary key_id (ObjectId)自動生成 12 字節唯一標識

Mongo Shell 基礎操作

# 啟動服務
mongod
mongo

# CRUD
use test
db.createCollection("user")
db.user.insert({name: "wangxu", age: 27})
db.user.find({name: "wangxu"})
db.user.update({name: "wangxu"}, {$set: {age: 30}})
db.user.remove({name: "wangxu"})
db.user.drop()

Java 驅動 3.12+ 完整實戰

import com.mongodb.client.*;
import com.mongodb.MongoClient;
import org.bson.Document;
import java.util.*;

public class MongoQuickStart {
    public static void main(String[] args) {
        // 1. 建立連接 (無認證)
        try (MongoClient client = new MongoClient("localhost", 27017)) {
            MongoDatabase db = client.getDatabase("test");
            
            // 2. 獲取/創建集合
            MongoCollection coll = db.getCollection("user");
            
            // 3. 批量插入
            List docs = Arrays.asList(
                new Document("name", "wangxu").append("age", 27),
                new Document("name", "wangxu_java").append("age", 27)
            );
            coll.insertMany(docs);
            
            // 4. 更新 (多文檔)
            coll.updateMany(Filters.eq("name", "wangxu"), 
                new Document("$set", new Document("age", 30)));
            
            // 5. 查詢遍歷
            FindIterable iter = coll.find();
            try (MongoCursor cursor = iter.iterator()) {
                while (cursor.hasNext()) {
                    Document doc = cursor.next();
                    System.out.println("name=" + doc.getString("name") 
                        + ", age=" + doc.getInteger("age"));
                }
            }
            
            // 6. 刪除
            coll.deleteMany(Filters.eq("name", "wangxu_java"));
        }
    }
}

進階查詢構建器

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;
import static com.mongodb.client.model.Sorts.*;

Document query = and(
    eq("status", 1),
    gt("age", 18),
    in("city", "北京", "上海"),
    regex("name", "^張.*")
);

Document update = combine(
    set("lastLogin", new Date()),
    inc("loginCount", 1),
    push("tags", "vip")
);

coll.find(query)
    .sort(descending("createTime"))
    .limit(20)
    .skip(0)
    .forEach(doc -> System.out.println(doc.toJson()));

驅動異常處理特性注意

// 連接建立不拋異常 (延遲連接)
MongoClient client = new MongoClient("不存在的主機", 27017); // 不報錯

// 實際操作時才拋出 (多為非檢查異常)
try {
    client.getDatabase("test").listCollectionNames().first();
} catch (MongoTimeoutException e) {
    // 處理連接超時
}

設計啟示:驅動採用惰性連接,實際操作時才建立網絡連接。異常多為非檢查異常,建議在服務層統一捕獲轉換為業務異常。

生產環境配置建議

MongoClientOptions options = MongoClientOptions.builder()
    .connectionsPerHost(100)        // 連接池大小
    .maxWaitTime(120000)            // 獲取連接最大等待
    .socketTimeout(30000)           // Socket 讀寫超時
    .connectTimeout(10000)          // 建立連接超時
    .heartbeatFrequency(10000)      // 心跳檢測間隔
    .build();

MongoClient client = new MongoClient(
    new ServerAddress("host1", 27017),
    Arrays.asList(new ServerAddress("host2", 27017)), // 副本集
    options
);

總結

MongoDB 文檔模型天然契合 JSON/對象結構,Java 驅動 API 簡潔強大。掌握 Filters/Updates/Sorts 構建器、連接池調優、副本集高可用配置,即可應對大多數生產場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved