文档数据库服务

基于Java开发

2025-07-01 07:41:20

驱动包和运行环境

驱动安装

下载连接文档数据库服务使用的驱动包“mongo-java-driver-3.10.1.jar”,此安装包提供了访问文档数据库服务实例的API接口。

在项目的pom.xml中添加如下依赖。

  <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.10.1</version>
</dependency>

环境

客户端需配置JDK1.8。JDK是跨平台的,支持Windows,Linux等多种平台。

基于Java连接数据库

使用SSL证书连接

  1. 您可以在“实例管理”页面,单击实例名称进入“基本新消息”页面,确认开启了SSL后,单击“实例信息”模块“SSL”处的,下载证书。

  2. 通过Java连接文档数据库服务,代码中的Java链接格式如下:

            a.连接到单节点:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&ssl=true

         b.连接到副本集:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>authSource=admin&replicaSet=replica&ssl=true

         c.连接到集群:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&ssl=true

 参数

 说明

 username

 当前用户名。

 password

 当前用户的密码。

 instance_ip

 如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。


 如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。

 instance_port

 端口,默认8030,当前端口,参考“基本信息”页面该实例的“数据库端口”。

 database_name

 数据库名,即需要连接的数据库名。

 authSource

 鉴权用户数据库,取值为admin。

 ssl

 连接模式,值为true代表是使用ssl连接模式。

连接文档数据库服务的Java代码,可参考以下示例:

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

public class MongoDBSSLExample {
    public static void main(String[] args) throws Exception {
        //用户名
        String username = "";
        //数据库
        String databaseName = "";
        //密码
        String password = "";
        //证书路径
        String certPath = "";
        //连接地址
        String host = "";
        //端口
        int port = 8030;
        // 创建MongoCredential对象
        MongoCredential credential = MongoCredential.createCredential(username, databaseName, password.toCharArray());
        // 加载证书
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(new FileInputStream(certPath));
        // 创建SSL上下文
        SSLContext sslContext = SSLContext.getInstance("TLS");
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(null, null);
        keyStore.setCertificateEntry("mongodb-cert", certificate);
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(keyStore);
        sslContext.init(null, trustManagerFactory.getTrustManagers(), null);

        // 创建MongoClient实例
        MongoClientOptions options = MongoClientOptions.builder()
                .sslEnabled(true)
                .sslInvalidHostNameAllowed(true)
                .sslContext(sslContext)
                .build();
        MongoClient mongoClient = new MongoClient(new ServerAddress(host, port), credential, options);
    }
}

无证书连接

通过Java连接文档数据库服务实例,代码中的Java链接格式如下:

a. 连接到单节点:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin

b. 连接到副本集:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica

c. 连接到集群:

  mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin

参考代码如下:

  import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;

public class MongoDBExample {
    public static void main(String[] args) {
        //用户名
        String username = "";
        //数据库
        String databaseName = "";
        //密码
        String password = "";
        //连接地址
        String host = "";
        //端口
        int port = 8030;
        // 创建MongoCredential对象
        MongoCredential credential = MongoCredential.createCredential(username, databaseName, password.toCharArray());
        // 创建MongoClientOptions对象
        MongoClientOptions options = MongoClientOptions.builder()
                .retryWrites(true)
                .build();
        // 创建MongoClient实例
        MongoClient mongoClient = new MongoClient(new ServerAddress(host, port), credential, options);
    }
}

基于Java访问数据库

访问DataBase

当已经有一个初始化好的MongoClient后,通过如下方式来访问一个database,示例如下:

MongoDatabase memberInfoDatabase = mongoClient.getDatabase("MemberInfo");

访问集合

当获取一个MongoDatabase实例后,可以通过如下命令来得到要获取的集合:

MongoCollection<Document> coll = memberInfoDatabase.getCollection("gold_member");

显示的创建一个集合

也可以通过 createCollection()方法显示的创建一个集合,并在创建时候指定该集合的属性。

memberInfoDatabase.createCollection("testCollection", new CreateCollectionOptions().sizeInBytes(200000));

插入数据

Document doc0 = new Document("name", "万三")
        .append("age", 30)
        .append("sex", "male");

Document doc1 = new Document("name", "刘亚")
        .append("age", 42)
        .append("sex", "male");

Document doc2 = new Document("name", "王莹")
        .append("age", 22)
        .append("sex", "female");

List<Document> documents = new ArrayList<>();
documents.add(doc0);
documents.add(doc1);
documents.add(doc2);
goldMemberCollection.insertMany(documents);

删除数据

goldMemberCollection.deleteOne(eq("name", "刘亚"));

删除表

MongoCollection<Document> collection = memberInfoDatabase.getCollection("test");
collection.drop();

读数据

MongoCursor<String> cursor = (MongoCursor<String>) goldMemberCollection.find();
while (cursor.hasNext())  {
    Object result = cursor.next();
}
cursor.close();

带过滤条件的查询

MongoCursor<String> cursorCondition = (MongoCursor<String>)goldMemberCollection.find(
        new Document("name","zhangsan")
                .append("age", 5));
while (cursorCondition.hasNext())  {
    Object result = cursorCondition.next();
}
cursorCondition.close();

运行命令

执行buildInfo和collStats:

MongoClient mongoClientShell = (MongoClient) MongoClients.create();
MongoDatabase database = mongoClientShell.getDatabase("MemberInfo");

Document buildInfoResults = database.runCommand(new Document("buildInfo", 1));
System.out.println(buildInfoResults.toJson());

Document collStatsResults = database.runCommand(new Document("collStats", "restaurants"));
System.out.println(collStatsResults.toJson());

创建索引

MongoCollection<Document> collectionTest = memberInfoDatabase.getCollection("gold_member");
collectionTest.createIndex(Indexes.ascending("age"));

基于Java开发完整示例

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.Indexes;
import org.bson.Document;

import java.util.ArrayList;
import java.util.List;

import static com.mongodb.client.model.Filters.eq;

public class MongoDBExample {
    public static void main(String[] args) {
        //用户名
        String username = "";
        //数据库
        String databaseName = "";
        //密码
        String password = "";
        //连接地址
        String host = "";
        //端口
        int port = 8030;
        // 创建MongoCredential对象
        MongoCredential credential = MongoCredential.createCredential(username, databaseName, password.toCharArray());
        // 创建MongoClientOptions对象
        MongoClientOptions options = MongoClientOptions.builder()
                .retryWrites(true)
                .build();
        // 创建MongoClient实例
        MongoClient mongoClient = new MongoClient(new ServerAddress(host, port), credential, options);
        //访问database
        MongoDatabase memberInfoDatabase = mongoClient.getDatabase("MemberInfo");
        //访问collection
        MongoCollection<Document> goldMemberCollection = memberInfoDatabase.getCollection("gold_member");
        //创建collection
        memberInfoDatabase.createCollection("testCollection", new CreateCollectionOptions().sizeInBytes(200000));

        //插入数据
        Document doc0 = new Document("name", "万三")
                .append("age", 23)
                .append("sex", "male");
        Document doc1 = new Document("name", "刘亚")
                .append("age", 42)
                .append("sex", "male");
        Document doc2 = new Document("name", "王莹")
                .append("age", 22)
                .append("sex", "female");
        List<Document> documents = new ArrayList<>();
        documents.add(doc0);
        documents.add(doc1);
        documents.add(doc2);
        goldMemberCollection.insertMany(documents);

        //删除数据
        goldMemberCollection.deleteOne(eq("name", "刘亚"));

        //删除表
        MongoCollection<Document> collection = memberInfoDatabase.getCollection("test");
        collection.drop();

        //读数据
        MongoCursor<String> cursor = (MongoCursor<String>) goldMemberCollection.find();
        while (cursor.hasNext())  {
            Object result = cursor.next();
        }
        cursor.close();

        //带过滤条件的查询
        MongoCursor<String> cursorCondition = (MongoCursor<String>)goldMemberCollection.find(
                new Document("name","zhangsan")
                        .append("age", 5));
        while (cursorCondition.hasNext())  {
            Object result = cursorCondition.next();
        }
        cursorCondition.close();

        //运行命令
        MongoClient mongoClientShell = (MongoClient) MongoClients.create();
        MongoDatabase database = mongoClientShell.getDatabase("MemberInfo");

        Document buildInfoResults = database.runCommand(new Document("buildInfo", 1));
        System.out.println(buildInfoResults.toJson());

        Document collStatsResults = database.runCommand(new Document("collStats", "restaurants"));
        System.out.println(collStatsResults.toJson());

        //创建索引
        MongoCollection<Document> collectionTest = memberInfoDatabase.getCollection("gold_member");
        collectionTest.createIndex(Indexes.ascending("age"));
    }
}


E5t.nBZNd3XV