Java连接mongodb数据库

举报
福州司马懿 发表于 2025/04/06 22:28:50 2025/04/06
【摘要】 使用 Java 连接 MongoDB 数据库通常需要借助 MongoDB 官方提供的 Java 驱动程序 mongodb-driver-sync(同步驱动)或 mongodb-driver-reactivestreams(异步驱动)。以下是使用 Java 同步驱动连接 MongoDB 的详细步骤: 1. 添加 Maven 依赖如果使用 Maven 构建项目,可以在 pom.xml 文件中添加...

使用 Java 连接 MongoDB 数据库通常需要借助 MongoDB 官方提供的 Java 驱动程序 mongodb-driver-sync(同步驱动)或 mongodb-driver-reactivestreams(异步驱动)。以下是使用 Java 同步驱动连接 MongoDB 的详细步骤:


1. 添加 Maven 依赖

如果使用 Maven 构建项目,可以在 pom.xml 文件中添加 MongoDB 驱动依赖:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.10.2</version> <!-- 检查最新版本 -->
</dependency>

如果使用 Gradle,可以添加以下依赖:

implementation 'org.mongodb:mongodb-driver-sync:4.10.2'

2. 使用 Java 连接 MongoDB

以下是使用 Java 同步驱动连接 MongoDB 的基本步骤:

代码示例

import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

import java.util.Collections;

public class MongoDBExample {
    public static void main(String[] args) {
        // 1. 创建 MongoDB 客户端
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {

            // 2. 选择数据库(如果不存在,会在插入数据时自动创建)
            MongoDatabase database = mongoClient.getDatabase("my_database");

            // 3. 选择集合(类似于关系型数据库中的表,如果不存在,会在插入数据时自动创建)
            MongoCollection<Document> collection = database.getCollection("my_collection");

            // 4. 插入一条文档(记录)
            Document document = new Document("name", "Alice")
                                .append("age", 25)
                                .append("city", "New York");
            collection.insertOne(document);
            System.out.println("文档插入成功");

            // 5. 查询文档
            Document foundDocument = collection.find(new Document("name", "Alice")).first();
            System.out.println("查询到的文档: " + foundDocument.toJson());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 详细说明

1. 创建 MongoDB 客户端

  • 使用 MongoClients.create() 方法创建客户端。
  • 参数可以是:
    • MongoDB URI:如 mongodb://localhost:27017/(本地默认地址)。
    • 连接选项:可以传递 MongoClientSettings 对象,配置连接池、超时等。

2. 选择数据库

  • 使用 mongoClient.getDatabase("database_name") 选择数据库。
  • 如果数据库不存在,在插入数据时会自动创建。

3. 选择集合

  • 使用 database.getCollection("collection_name") 选择集合。
  • 如果集合不存在,在插入数据时会自动创建。

4. 插入数据

  • 使用 collection.insertOne() 插入单条文档。
  • 使用 collection.insertMany() 插入多条文档。

5. 查询数据

  • 使用 collection.find() 查询文档,返回一个 FindIterable 对象。
  • 使用 .first() 获取第一条匹配的文档。

4. 示例:插入和查询多条文档

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

import java.util.Arrays;

public class MongoDBExample {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("my_database");
            MongoCollection<Document> collection = database.getCollection("my_collection");

            // 插入多条文档
            collection.insertMany(Arrays.asList(
                new Document("name", "Bob").append("age", 30).append("city", "Los Angeles"),
                new Document("name", "Charlie").append("age", 35).append("city", "Chicago")
            ));
            System.out.println("多条文档插入成功");

            // 查询多条文档
            for (Document doc : collection.find()) {
                System.out.println(doc.toJson());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. 常见操作

更新文档

  • 使用 collection.updateOne() 更新单条文档。
  • 使用 collection.updateMany() 更新多条文档。
// 更新单条文档
collection.updateOne(
    new Document("name", "Alice"),
    new Document("$set", new Document("age", 26))
);

// 更新多条文档
collection.updateMany(
    new Document("city", "New York"),
    new Document("$set", new Document("country", "USA"))
);

删除文档

  • 使用 collection.deleteOne() 删除单条文档。
  • 使用 collection.deleteMany() 删除多条文档。
// 删除单条文档
collection.deleteOne(new Document("name", "Alice"));

// 删除多条文档
collection.deleteMany(new Document("age", new Document("$lt", 30)));

聚合查询

  • 使用 collection.aggregate() 进行复杂的聚合操作。
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Sorts;
import org.bson.conversions.Bson;

import java.util.List;

List<Bson> pipeline = Arrays.asList(
    Aggregates.group("$city", 
        new Document("total_age", new Document("$sum", "$age")),
        new Document("count", new Document("$sum", 1))
    ),
    Aggregates.sort(Sorts.ascending("total_age"))
);

for (Document doc : collection.aggregate(pipeline)) {
    System.out.println(doc.toJson());
}

6. 注意事项

  1. MongoDB URI 格式

    • 本地连接:mongodb://localhost:27017/
    • 远程连接:mongodb://username:password@host:port/
    • 配置选项:mongodb://host:port/?replicaSet=rs0&readPreference=secondaryPreferred
  2. 异常处理

    • 使用 try-with-resources 确保连接关闭。
    • 捕获 MongoException 或其他运行时异常。
  3. 性能优化

    • 使用连接池(pymongo 和 Java 驱动默认支持)。
    • 避免频繁打开和关闭连接。
  4. 驱动版本

    • 确保使用与 MongoDB 服务器兼容的驱动版本。

通过以上步骤,你可以使用 Java 轻松连接和操作 MongoDB 数据库。根据业务需求,可以进一步探索 MongoDB 的高级功能,如索引、分片、复制集等。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。