出于隐私原因,我们将mongobd配置为禁止“listdatabase”(即mongClient.getDatabaseNames())功能
我想在不使用mongClient.getDatabaseNames()的情况下检查MongoDB中是否存在数据库。
如果我使用mongoClient.getDB(“mydb”),mongodb会创建一个新的数据库实例,它无法检查dbname是否存在。
有什么建议吗?
我们有一个通用的“ui连接向导”来连接到具有不同身份验证的不同mongodb服务器。该向导必须验证“dabase_name”字段,用户是否输入了正确的数据库名称。在这种情况下,“listDatabase”(即client.getDataBaseNames())不能用作身份验证失败,或者“use db”(即client.getDB())无法使用,因为它会创建新的数据库实例。
答案 0 :(得分:3)
您何时考虑存在数据库?你为什么需要做这个检查? MongoDB在数据库中创建数据库时创建数据库,这在插入数据,创建索引或使用db.createCollection()
创建集合时发生。数据库不存在的合理条件是它不包含任何集合。另一个合理的条件是它包含的所有集合都不包含数据。您可以使用db.getCollectionNames()
检查前者,后者通过检查每个集合的db.<collection>.count()
来检查前者。然而第三个条件可能是数据库的存储大小为零,您可以使用db.stats()
进行检查。
在出于安全原因禁止getDatabaseNames()
的情况下,您应该控制对安全性的数据库访问,并担心授权而不是存在。如果存在数据库,则应将其限制为适当的用户和角色,以便在其他用户尝试与该数据库进行交互时,将拒绝这些数据库。