整理這幾天學習 MongoDB 的核心心得,涵蓋 Java 驅動程式的連線管理、資料庫與集合操作、文檔的新增、查詢以及 JSON 轉換技巧,供日後查閱參考。
為了適應單機、指定 IP/Port、以及叢集等多種部署場景,封裝了一個通用的 MongoDbUtil 工具類。核心邏輯透過可變長參數 int... port 判斷連線模式:
localhost:27017 或指定 Host 的預設端口。ServerAddress 列表連線叢集,驅動會自動發現 Primary 節點。public static MongoClient getMongoClient(String host, int... port) {
MongoClient mongoClient = null;
int portlen = (port != null) ? port.length : 0;
try {
switch (portlen) {
case 0:
mongoClient = (host != null && !host.isEmpty()) ? new MongoClient(host) : new MongoClient();
break;
case 1:
mongoClient = new MongoClient(host, port[0]);
break;
default:
List<ServerAddress> seeds = new ArrayList<>();
String[] hosts = host.split(",");
for (int i = 0; i < portlen; i++) {
seeds.add(new ServerAddress(hosts[i], port[i]));
}
mongoClient = new MongoClient(seeds);
break;
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
return mongoClient;
}
取得 MongoClient 實例後,即可列出所有資料庫、切換目標資料庫、獲取集合名稱(相當於關聯式資料表):
MongoClient mongoClient = MongoDbUtil.getMongoClient("192.168.1.101", 27017);
// 列印所有資料庫名稱
for (String name : mongoClient.getDatabaseNames()) {
System.out.println("databaseName: " + name);
}
// 獲取指定資料庫
DB db = mongoClient.getDB("xuywdb");
// 獲取所有集合名稱
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println(s);
}
MongoDB 使用 DBObject(通常用 BasicDBObject)表示文檔。新增資料只需 put 鍵值對並呼叫 insert():
public void insertUser(DBCollection t_user) {
DBObject user1 = new BasicDBObject("username", "張三")
.append("userage", 18).append("usersex", "男");
DBObject user2 = new BasicDBObject("username", "小紅")
.append("userage", 19).append("usersex", "女");
t_user.insert(user1);
t_user.insert(user2);
}
查詢所有文檔會返回 DBCursor 游標,逐筆迭代輸出:
DBCollection t_user = db.getCollection("t_user");
DBCursor cursor = t_user.find();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
輸出範例:
{ "_id" : { "$oid" : "5550bf41d975cf177eab8d1f" } , "username" : "張三" , "userage" : 18 , "usersex" : "男" }
{ "_id" : { "$oid" : "5550bf41d975cf177eab8d20" } , "username" : "小紅" , "userage" : 19 , "usersex" : "女" }
驅動內建 JSON 工具類,方便與前端或其他系統交換資料:
JSON.serialize(dbObject):將 DBObject 序列化為 JSON 字串。JSON.parse("{ 'name' : 'xuyw', 'age' : 23 }"):將 JSON 字串解析為 DBObject。掌握這些基礎 API,即可在 Java 應用中靈活操作 MongoDB,後續再深入索引、聚合管線、事務等進階主題。