【发布时间】:2023-04-03 11:20:02
【问题描述】:
我的问题-我在 ubuntu 服务器上安装了 mongodb,它有多个数据库,我想连接到服务器上安装的 mongodb 并获取所有数据库(数据库名称、每个数据库的集合)并对所有数据库执行搜索操作数据库。 注意 - 我不知道数据库的名称
【问题讨论】:
标签: java mongodb spring-boot
我的问题-我在 ubuntu 服务器上安装了 mongodb,它有多个数据库,我想连接到服务器上安装的 mongodb 并获取所有数据库(数据库名称、每个数据库的集合)并对所有数据库执行搜索操作数据库。 注意 - 我不知道数据库的名称
【问题讨论】:
标签: java mongodb spring-boot
它不会开箱即用。如果你包含 spring-boot mongodb starter 项目,它会寻找属性 'spring.data.mongodb.uri' 连接到单个数据库,如果没有找到,它会尝试连接到 'localhost: 27017'。然后,这个单一数据库将自动用于所有 Spring Data Repositories。
您可以为不同的数据库添加额外的 MongoClient bean,但您需要做一些工作才能将不同的 Spring Data Repositories 连接到这些不同的 bean。
如果你想使用一组动态的数据库,即当你不知道哪些数据库或有多少数据库时,你无论如何都不能使用固定的 MongoClients 作为 spring bean。您需要某种工厂来根据数据库的数量创建多个 MongoClient bean,以及连接到每个 MongoClient bean 的多个 SearchRepository bean。
取决于您项目的复杂性,但对于这个用例,我根本不会使用 Spring Data,而是坚持使用 MongoDB Java 客户端 API:
Map<String, MongoClient> clientsPerDatabase = new HashMap<>();
// Setup
MongoClient mongoClient = new MongoClient(/* default database */);
MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
while(dbsCursor.hasNext()) {
String databaseName = dbsCursor.next();
if (!"admin".equals(databaseName)) {
clientsPerDatabase.put(databaseName, new MongoClient(...+databaseName);
}
}
// Query
for(MongoClient client: clientsPerDatabase.values()){
...
}
【讨论】:
我会为 Spring Boot 应用程序配置对数据库的管理员访问权限,然后使用本机查询来检索所有现有数据库、模式等的信息
【讨论】: