mongodb - 如何在不使用 mongClient.getDatabaseNames() 的情况下检查 MongoDB 上是否存在数据库

标签 mongodb

出于隐私原因,我们将 mongobd 配置为禁止“listdatabase”(即 mongClient.getDatabaseNames())功能

我想在不使用 mongClient.getDatabaseNames() 的情况下检查 MongoDB 中是否存在数据库。

如果我使用 mongoClient.getDB("mydb"),mongodb 会创建一个新的数据库实例,该实例无法帮助检查 dbname 是否存在。

请问有什么建议吗?

我们有一个通用的“ui 连接向导”来连接到具有不同身份验证的不同 mongodb 服务器。该向导必须验证“dabase_name”字段,用户是否输入了正确的数据库名称。在这种情况下,“listDatabase”(即 client.getDataBaseNames())无法使用,因为身份验证失败,或者“use db”(即 client.getDB())无法使用,因为它创建了新的数据库实例。

最佳答案

您什么时候认为数据库存在?为什么需要进行这项检查? MongoDB 在数据库中创建集合时会创建数据库,这会在插入数据、创建索引或使用 db.createCollection() 创建集合时发生。 。数据库不存在的合理条件是它不包含集合。另一个合理的条件是其中包含的所有集合都不包含数据。您可以使用 db.getCollectionNames() 检查前者。 ,后者通过检查 db.<collection>.count()对于每个集合。第三个条件可能是数据库的存储大小为零,您可以使用 db.stats() 检查该情况。 .

在您的情况下 getDatabaseNames()由于安全原因而被禁止,您应该安全地控制对数据库的访问并担心授权,而不是存在。如果数据库存在,则应将其限制为适当的用户和角色,以便如果其他用户尝试与该数据库交互,他们将被拒绝。

关于mongodb - 如何在不使用 mongClient.getDatabaseNames() 的情况下检查 MongoDB 上是否存在数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482351/

相关文章:

javascript - 尝试更新文档时出现错误 "user.save is not a function"

php - MongoConnectionException - 无法连接到 : localhost:27017

javascript - 使用 mongodb 聚合查询获取子文档中 sibling 的数量

MongoDB 数组对象更新和页面

java - NoSQL 数据存储提供程序 : org. hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider

java - 如何从java并发读取和更新mongodb的字段

java - MongoDB java API 聚合 $lookup 和管道使用变量

ruby-on-rails - 在 mongo ruby​​ 驱动程序中使用 DBRef:(#<Mongo::DBRef:0x0056466ed55e48> 的未定义方法 `bson_type')

arrays - 从 Mongo 中的嵌入式数组中按值提取项目

java - 查询嵌套文档数组以获得字段的最大值