点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布!"快的模型 + 深度思考模型 + 实时路由",持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年10月20日更新到:
Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务正在更新!深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

Java 访问 MongoDB
Maven
通过 Java + Maven 访问 MongoDB 完整指南
1. 环境准备
1.1 安装 MongoDB
首先确保已在本地或远程服务器安装 MongoDB 数据库服务:
- 下载地址:https://www.mongodb.com/try/download/community
- 安装教程可参考官方文档
- 启动 MongoDB 服务:
mongod --dbpath=/data/db
1.2 创建 Maven 项目
使用 IDE 或命令行创建 Maven 项目:
bash
mvn archetype:generate -DgroupId=com.example -DartifactId=mongodb-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2. 添加 MongoDB 依赖
在 pom.xml 中添加 MongoDB Java 驱动依赖:
xml
<dependencies>
<!-- MongoDB Java Driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
<!-- 可选:添加日志框架 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>
3. 连接 MongoDB 数据库
3.1 基本连接方式
java
public class MongoDBConnection {
public static void main(String[] args) {
// 连接字符串格式:mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
String connectionString = "mongodb://localhost:27017";
try (MongoClient mongoClient = MongoClients.create(connectionString)) {
// 获取数据库(不存在时会自动创建)
MongoDatabase database = mongoClient.getDatabase("testdb");
System.out.println("成功连接到数据库: " + database.getName());
// 列出所有集合(类似关系型数据库的表)
for (String name : database.listCollectionNames()) {
System.out.println("集合名称: " + name);
}
}
}
}
3.2 连接池配置
java
public class MongoDBPool {
public static void main(String[] args) {
ConnectionString connString = new ConnectionString(
"mongodb://localhost:27017/?maxPoolSize=50&waitQueueTimeoutMS=2000");
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(connString)
.build();
try (MongoClient mongoClient = MongoClients.create(settings)) {
// 使用连接池进行操作...
}
}
}
4. CRUD 操作示例
4.1 创建文档
java
public class CreateExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoDatabase database = mongoClient.getDatabase("testdb");
MongoCollection<Document> collection = database.getCollection("users");
// 创建单个文档
Document user1 = new Document("name", "张三")
.append("age", 25)
.append("email", "zhangsan@example.com")
.append("hobbies", Arrays.asList("篮球", "阅读", "旅行"));
collection.insertOne(user1);
System.out.println("文档插入成功");
// 批量插入
List<Document> users = new ArrayList<>();
users.add(new Document("name", "李四").append("age", 30));
users.add(new Document("name", "王五").append("age", 28));
collection.insertMany(users);
System.out.println("批量插入完成");
}
}
}
4.2 查询文档
java
public class QueryExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoCollection<Document> collection = mongoClient
.getDatabase("testdb")
.getCollection("users");
// 查询所有文档
System.out.println("所有用户:");
collection.find().forEach(doc -> System.out.println(doc.toJson()));
// 条件查询
System.out.println("\n年龄大于25岁的用户:");
collection.find(gt("age", 25))
.forEach(doc -> System.out.println(doc.toJson()));
// 组合查询
System.out.println("\n年龄在25-30之间的用户:");
collection.find(and(gt("age", 25), lt("age", 30)))
.forEach(doc -> System.out.println(doc.toJson()));
}
}
}
4.3 更新文档
java
public class UpdateExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoCollection<Document> collection = mongoClient
.getDatabase("testdb")
.getCollection("users");
// 更新单个文档
collection.updateOne(
eq("name", "张三"),
set("email", "newemail@example.com")
);
// 更新多个文档
collection.updateMany(
lt("age", 30),
inc("age", 1) // 年龄加1
);
// 替换整个文档
Document newUser = new Document("name", "张三")
.append("age", 26)
.append("address", "北京市海淀区");
collection.replaceOne(eq("name", "张三"), newUser);
}
}
}
4.4 删除文档
java
public class DeleteExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoCollection<Document> collection = mongoClient
.getDatabase("testdb")
.getCollection("users");
// 删除单个文档
collection.deleteOne(eq("name", "王五"));
// 删除多个文档
collection.deleteMany(lt("age", 25));
// 删除整个集合
// collection.drop();
}
}
}
5. 使用 POJO 映射
5.1 添加依赖
在 pom.xml 中添加 POJO 映射支持:
xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.9.1</version>
</dependency>
5.2 创建实体类
java
public class User {
private ObjectId id;
@BsonProperty("name")
private String name;
@BsonProperty("age")
private int age;
@BsonProperty("email")
private String email;
// 构造方法、getter和setter
// ...
}
5.3 使用 POJO 进行操作
java
public class PojoExample {
public static void main(String[] args) {
CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = fromRegistries(
getDefaultCodecRegistry(),
fromProviders(pojoCodecProvider)
);
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoDatabase database = mongoClient
.getDatabase("testdb")
.withCodecRegistry(pojoCodecRegistry);
MongoCollection<User> users = database.getCollection("users", User.class);
// 插入POJO
User newUser = new User();
newUser.setName("赵六");
newUser.setAge(35);
newUser.setEmail("zhaoliu@example.com");
users.insertOne(newUser);
// 查询POJO
System.out.println("所有用户:");
users.find().forEach(user -> System.out.println(user.getName()));
}
}
}
6. 高级特性
6.1 索引管理
java
import com.mongodb.client.model.Indexes;
public class IndexExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoCollection<Document> collection = mongoClient
.getDatabase("testdb")
.getCollection("users");
// 创建单字段索引
collection.createIndex(Indexes.ascending("name"));
// 创建复合索引
collection.createIndex(Indexes.compoundIndex(
Indexes.ascending("name"),
Indexes.descending("age")
));
// 查看所有索引
for (Document index : collection.listIndexes()) {
System.out.println(index.toJson());
}
}
}
}
6.2 聚合查询
java
import static com.mongodb.client.model.Aggregates.*;
import static com.mongodb.client.model.Accumulators.*;
import static com.mongodb.client.model.Projections.*;
import static com.mongodb.client.model.Filters.*;
public class AggregationExample {
public static void main(String[] args) {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoCollection<Document> collection = mongoClient
.getDatabase("testdb")
.getCollection("users");
// 按年龄分组统计人数
collection.aggregate(Arrays.asList(
group("$age", sum("count", 1)),
sort(descending("count"))
)).forEach(doc -> System.out.println(doc.toJson()));
// 更复杂的聚合管道
collection.aggregate(Arrays.asList(
match(gt("age", 20)),
project(fields(
include("name"),
computed("birthYear", new Document("$subtract",
Arrays.asList(2023, "$age")))
))
)).forEach(doc -> System.out.println(doc.toJson()));
}
}
}
7. 事务支持
java
import com.mongodb.client.ClientSession;
import com.mongodb.client.TransactionBody;
public class TransactionExample {
public static void main(String[] args) {
String connectionString = "mongodb://localhost:27017";
try (MongoClient mongoClient = MongoClients.create(connectionString)) {
ClientSession session = mongoClient.startSession();
// 事务操作
TransactionBody<String> txnBody = () -> {
MongoDatabase database = mongoClient.getDatabase("bank");
MongoCollection<Document> accounts = database.getCollection("accounts");
// 转账操作
accounts.updateOne(
session,
eq("account_id", "A123"),
new Document("$inc", new Document("balance", -100))
);
accounts.updateOne(
session,
eq("account_id", "B456"),
new Document("$inc", new Document("balance", 100))
);
return "转账成功";
};
try {
// 执行事务
String result = session.withTransaction(txnBody);
System.out.println(result);
} catch (RuntimeException e) {
System.err.println("事务失败: " + e.getMessage());
} finally {
session.close();
}
}
}
}
8. 最佳实践
-
连接管理:
- 使用连接池,避免频繁创建和关闭连接
- 确保在使用后关闭 MongoClient
-
错误处理:
- 捕获并处理 MongoDB 异常
- 使用重试机制处理网络问题
-
性能优化:
- 合理使用索引
- 批量操作代替单条操作
- 使用投影减少数据传输量
-
安全建议:
- 生产环境使用认证连接
- 配置适当的用户权限
- 敏感信息不要硬编码在代码中
-
监控与日志:
- 记录重要操作日志
- 监控 MongoDB 性能指标
通过以上步骤,您已经掌握了使用 Java 和 Maven 访问 MongoDB 数据库的基本和高级操作。根据实际应用场景选择合适的方法,可以构建高效、可靠的 MongoDB 应用程序。
之前本地搭建的数据库操作
文档添加
java
package icu.wzk;
public class Mongo01 {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient(
ServerAddressHelper.createServerAddress("localhost", 27017),
MongoCredential.createCredential("admin", "admin", "admin123".toCharArray()),
new MongoClientOptions.Builder().build());
MongoDatabase mongoDatabase = mongoClient.getDatabase("wzk_test");
MongoCollection<Document> collection = mongoDatabase.getCollection("wzk_document");
Document document = new Document("name", "wzk").append("age", 18);
collection.insertOne(document);
mongoClient.close();
}
}
对应内容如下所示:

运行测试结果如下:

文档查询
java
package icu.wzk;
public class Mongo02 {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient(
ServerAddressHelper.createServerAddress("localhost", 27017),
MongoCredential.createCredential("admin", "admin", "admin123".toCharArray()),
new MongoClientOptions.Builder().build());
MongoDatabase mongoDatabase = mongoClient.getDatabase("wzk_test");
MongoCollection<Document> collection = mongoDatabase.getCollection("wzk_document");
Document document = new Document();
document.append("age", -1);
FindIterable<Document> findIterable = collection.find().sort(document);
for (Document document1 : findIterable) {
System.out.println(document1.toJson());
}
mongoClient.close();
}
}
代码如下所示:

执行结果如下所示:

查询过滤
java
package icu.wzk;
public class Mongo03 {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient(
ServerAddressHelper.createServerAddress("localhost", 27017),
MongoCredential.createCredential("admin", "admin", "admin123".toCharArray()),
new MongoClientOptions.Builder().build());
MongoDatabase mongoDatabase = mongoClient.getDatabase("wzk_test");
MongoCollection<Document> collection = mongoDatabase.getCollection("wzk_document");
Document document = new Document();
document.append("age", -1);
FindIterable<Document> findIterable = collection.find(
Filters.eq("name", "wzk")
).sort(document);
for (Document document1 : findIterable) {
System.out.println(document1.toJson());
}
mongoClient.close();
}
}
对应的代码如下所示:

运行结果如下所示:
