当前位置: 首页 > news >正文

Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 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 项目:

mvn archetype:generate -DgroupId=com.example -DartifactId=mongodb-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

2. 添加 MongoDB 依赖

pom.xml 中添加 MongoDB Java 驱动依赖:

<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 基本连接方式

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 连接池配置

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 创建文档

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 查询文档

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 更新文档

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 删除文档

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 映射支持:

<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 创建实体类

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 进行操作

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);// 插入POJOUser newUser = new User();newUser.setName("赵六");newUser.setAge(35);newUser.setEmail("zhaoliu@example.com");users.insertOne(newUser);// 查询POJOSystem.out.println("所有用户:");users.find().forEach(user -> System.out.println(user.getName()));}}
}

6. 高级特性

6.1 索引管理

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 聚合查询

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. 事务支持

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. 最佳实践

  1. 连接管理

    • 使用连接池,避免频繁创建和关闭连接
    • 确保在使用后关闭 MongoClient
  2. 错误处理

    • 捕获并处理 MongoDB 异常
    • 使用重试机制处理网络问题
  3. 性能优化

    • 合理使用索引
    • 批量操作代替单条操作
    • 使用投影减少数据传输量
  4. 安全建议

    • 生产环境使用认证连接
    • 配置适当的用户权限
    • 敏感信息不要硬编码在代码中
  5. 监控与日志

    • 记录重要操作日志
    • 监控 MongoDB 性能指标

通过以上步骤,您已经掌握了使用 Java 和 Maven 访问 MongoDB 数据库的基本和高级操作。根据实际应用场景选择合适的方法,可以构建高效、可靠的 MongoDB 应用程序。

之前本地搭建的数据库操作

文档添加

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();}
}

对应内容如下所示:
在这里插入图片描述

运行测试结果如下:
在这里插入图片描述

文档查询

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();}}

代码如下所示:
在这里插入图片描述

执行结果如下所示:
在这里插入图片描述

查询过滤

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();}
}

对应的代码如下所示:
在这里插入图片描述

运行结果如下所示:
在这里插入图片描述

http://www.dtcms.com/a/506676.html

相关文章:

  • 1.云计算与服务器基础
  • 基于Draw.io的实时协作架构设计与性能优化实践
  • 网站右侧固定标题怎么做深圳品牌馆设计装修公司
  • ASP.NET MVC 前置基础:宿主环境 HttpRuntime 管道,从部署到流程拆透(附避坑指南)
  • 北京单位网站建设培训俱乐部网站方案
  • 如何将一加手机的照片传输到笔记本电脑?
  • 手机群控软件如何构建高效稳定的运营环境?
  • 云手机 无限畅玩手游 巨 椰
  • 做男装去哪个网站好网站备案后 如何建设
  • 用C语言实现代理模式
  • 云开发CloudBase AI+实战:快速搭建AI小程序全流程指南
  • ESP32学习笔记(基于IDF):连接手机热点,用TCP协议实现数据双向通信
  • 一个小程序轻量AR体感游戏,开发实现解决方案
  • java整合itext pdf实现固定模版pdf导出
  • 26考研数学一、二、三真题试卷及答案PDF电子版(1987-2025年)
  • Django Web 开发系列(二):视图进阶、快捷函数与请求响应处理
  • 重庆哪些网站推广公司wordpress获取用户名
  • Bevy 渲染系统 Bindless 实现与交互逻辑
  • K8s控制器终极对比:StatefulSet与Deployment详解
  • [Agent可视化] docs | go/rust/py混构 | Temporal编排 | WASI沙箱
  • Linux服务器编程实践55-网络信息API:gethostbyname与gethostbyaddr实现主机名解析
  • Godot 2D游戏开发全流程实战
  • 自动驾驶工程师面试(定位、感知向)
  • Cocos学习——摄像机Camera
  • 千秋网站建设公司百度如何快速收录
  • 深圳大型论坛网站建设免费行情网站在线
  • 《软件测试分类指南(下):从测试阶段到地域适配,拆解落地核心维度》
  • Python 查询网站开发3g小说网站
  • 基于Python的Word文档模板自动化处理:从占位符提取到智能填充
  • vue3子组件向父组件传递参数