Java中通过MongoClient获取MongoDB数据库的名称、表名和字段名及相关信息

MongoDB相关操作

前置条件:1.项目中需添加MongoDB相关依赖;2.文件中导入MongoDb所需的包;

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

1. 获取MongoClient客户端

/**
* 获取MongoClient客户端
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static MongoClient getMongoClient(String url) {
    MongoClientURI mongoClientURI = new MongoClientURI(url);
    MongoClient mongoClient = new MongoClient(mongoClientURI);
    return mongoClient;
}

2. 获取数据库列表

/**
* 获取数据库列表
* 
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static ListDatabasesIterable<Document> getDataBases(String url) {
    MongoClient mongoClient = getMongoClient(url);
    ListDatabasesIterable<Document> listDatabasesIterable = mongoClient.listDatabases();
    for (Document database: listDatabasesIterable) {
        System.out.println("DataBase : " + database.get("name"));
    }
    close(mongoClient);
    return listDatabasesIterable;
}

输出结果如下:
============= >> ========= DataBase ============= << =========
DataBase : admin
DataBase : local
DataBase : config
DataBase : test
DataBase : testdata

3. 获取数据库中的集合

/**
* 获取数据库中的集合
* 
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static void getCollectionNames(String url) {
    ListDatabasesIterable<Document> listDatabasesIterable = getDataBases(url);
    MongoClient mongoClient = getMongoClient(url);
    for (Document database: listDatabasesIterable) {
        String databaseName = String.valueOf(database.get("name"));
        // 跳过系统相关表
        if ("admin".equals(databaseName) 
             || "config".equals(databaseName) 
             || "local".equals(databaseName)) {
            continue;
        }
        MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
        MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();
        System.out.println("DataBase : " + databaseName);
        for (String collectionName: collectionNames) {
            System.out.println(" CollectionName : " + collectionName);           
            // getField(mongoDatabase, collectionName);
            // getDocument(mongoDatabase, collectionName);
        }
    }
    close(mongoClient);
}

输出结果如下:
DataBase : test
CollectionName : test
CollectionName : user
DataBase : testdata
CollectionName : account
CollectionName : class
CollectionName : score

4. 获取集合中的字段及格式

/**
* 获取集合中的字段及格式
* 
* @param mongoDatabase 数据库
* @param collectionName 集合名称
*/
public static void getField(MongoDatabase mongoDatabase, String collectionName) {
    Document doc = mongoDatabase.getCollection(collectionName).find().first();
    System.out.println("Collection : " + collectionName);
    if (Objects.nonNull(doc)) {
        BsonDocument document = BsonDocument.parse(doc.toJson());
        for(Map.Entry<String, BsonValue> entry : document.entrySet()){
            BsonValue value = entry.getValue();
            String type = value.getBsonType().name();
             System.out.println("Column : " + entry.getKey() + " ==== ColumnType : " + type);
        }
    }
}

输出的结果如下:
Collection : account
Column : _id ==== ColumnType : STRING
Column : name ==== ColumnType : STRING
Column : classId ==== ColumnType : ARRAY

5. 获取集合中的数据

/**
* 获取集合中的数据
* 
* @param mongoDatabase 数据库
* @param collectionName 集合名称
*/
public static void getDocument(MongoDatabase mongoDatabase, String collectionName) {
    MongoCollection<Document> collection =  mongoDatabase.getCollection(collectionName);
    // 查询限制50条
    FindIterable<Document> findIterable = collection.find().limit(50);
    System.out.println("CollectionName : " + collectionName);
    for (Document document : findIterable) {
        System.out.println(document);
    }
}

输出结果如下:
CollectionName : account
Document{{_id=11, name=李xxx, classId=[1, 2, 3]}}
Document{{_id=22, name=赵sss, classId=[1, 2]}}
Document{{_id=33, name=钱sss, classId=[2, 3]}}

6. 关闭客户端连接

public static void close(MongoClient mongoClient) {
	if (Objects.nonNull(mongoClient)) {
		mongoClient.close();
	}
}

总体

import com.mongodb.client.*;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.bson.BsonDocument;
import org.bson.BsonValue;
import org.bson.Document;

import java.util.Map;
import java.util.Objects;

public class MongodbDemo {

    // 1.获取MongoClient客户端
    public static MongoClient getMongoClient(String url) {
        MongoClientURI mongoClientURI = new MongoClientURI(url);
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return mongoClient;
    }

     // 2.获取数据库列表
    public static ListDatabasesIterable<Document> getDataBases(String url) {
        MongoClient mongoClient = getMongoClient(url);
        ListDatabasesIterable<Document> listDatabasesIterable = mongoClient.listDatabases();
        for (Document database: listDatabasesIterable) {
            System.out.println("DataBase : " + database.get("name"));
        }
        close(mongoClient);
        return listDatabasesIterable;
     }

	// 3.获取数据库中的集合
    public static void getCollectionNames(String url) {
        ListDatabasesIterable<Document> listDatabasesIterable = getDataBases(url);
        MongoClient mongoClient = getMongoClient(url);
        for (Document database: listDatabasesIterable) {
            String databaseName = String.valueOf(database.get("name"));
            // 跳过系统相关表
            if ("admin".equals(databaseName)
                    || "config".equals(databaseName)
                    || "local".equals(databaseName)) {
                continue;
            }
            MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
            MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();
            System.out.println("DataBase : " + databaseName);
            for (String collectionName: collectionNames) {
                System.out.println(" CollectionName : " + collectionName);
                getField(mongoDatabase, collectionName);
                getDocument(mongoDatabase, collectionName);
            }
        }
        close(mongoClient);
    }

    // 4.获取集合中的字段及格式
    public static void getField(MongoDatabase mongoDatabase, String collectionName) {
        Document doc = mongoDatabase.getCollection(collectionName).find().first();
        System.out.println("Collection : " + collectionName);
        if (Objects.nonNull(doc)) {
            BsonDocument document = BsonDocument.parse(doc.toJson());
            for(Map.Entry<String, BsonValue> entry : document.entrySet()){
                BsonValue value = entry.getValue();
                String type = value.getBsonType().name();
                System.out.println("Column : " + entry.getKey() + " ==== ColumnType : " + type);
            }
        }
    }

    // 5.获取集合中的数据
    public static void getDocument(MongoDatabase mongoDatabase, String collectionName) {
        MongoCollection<Document> collection =  mongoDatabase.getCollection(collectionName);
        // 查询限制50条
        FindIterable<Document> findIterable = collection.find().limit(50);
        System.out.println("CollectionName : " + collectionName);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

	// 6.关闭客户端连接
    public static void close(MongoClient mongoClient) {
        if (Objects.nonNull(mongoClient)) {
            mongoClient.close();
        }
    }

	// 测试
    public static void main(String[] args) {
        String path = "mongodb://127.0.0.1:27017";
        MongoClient client = getMongoClient(path);
        ListDatabasesIterable<Document>  listDatabases = getDataBases(path);
        getCollectionNames(path);
        getField(client.getDatabase("testdata"), "account");
        getDocument(client.getDatabase("testdata"), "account");
        close(client);
    }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值