我有以下问题:

我正在使用MongoDB 3的Java驱动程序.

在版本2中,可以使用DB.collectionExists(名称)判断所选数据库中是否存在集合.

在从DB切换到MongoDatabase的版本3中,这种方法不再存在.

如何确定数据库中是否存在集合?我试图用listCollectionNames()遍历集合,但这似乎非常无效.

谢谢你的帮助

推荐答案

你说得对.看起来好像是3.0.x版本的MongoDB驱动程序没有通过直接的"does collection exist?"方法移植到MongoDatabase.

正如您已经提到的,您可以 Select 迭代listCollectionNames()的结果.虽然这似乎无效,但它与DB.collectionExists(String)方法的实现类似.下面的代码片段是从mongo-java-driver source中的DB.java类复制而来的:

public boolean collectionExists(final String collectionName) {
    Set<String> collectionNames = getCollectionNames();
    for (final String name : collectionNames) {
        if (name.equalsIgnoreCase(collectionName)) {
            return true;
        }
    }
    return false;
}

您还可以通过调用getDB方法从MongoClient中获得DB而不是MongoDatabase.这让你可以使用collectionExists方法which is deprecated.当然,I do not recommend this second approach,因为,如前所述,it is deprecated.

因此,采用listCollectionNames次迭代的方法.

Mongodb相关问答推荐

在出现错误时忽略mongodb事务回滚是好做法吗

使用特定关键字和邻近度进行查询和过滤

MongoDB 聚合 - 条件 $lookup 取决于字段是否存在

Mongodb 按数组元素聚合组

随着时间的推移在 mongodb 中获得

程序可以运行,但我不断收到发送到客户端后无法设置标题,我应该忽略它吗?

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

在数据中只有月份和年份的 mongodb 中字符串的日期时间

在golang中的mongodb中的集合列表中打印集合

MongoDB PHP UTF-8 问题

如何在 Mongo 聚合管道中获取限制之前的计数

MongoDB 2.1 聚合框架总和匹配名称的数组元素

如何检索 MongoDb 集合验证器规则?

ZonedDateTime 与 MongoDB

Mongo: query by key one level deep

Flask:设置应用程序和请求特定的属性?

MongoDB MapReduce - 发出一个键/一个值不调用reduce

在 MongoDB 中快速搜索数十亿个小文档的策略

如何在 $match 内的 mongodb 聚合查询中使用 $regex

对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?