MongoDB 3 Java 检查集合是否存在

2022-09-02 11:44:41

我有以下问题:

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

在版本 2 中,可以执行 DB.collectionExists(name) 来检查所选数据库中是否存在集合。

在版本3中,从DB切换到MongoDatabase时,此方法不再存在。

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

感谢您的帮助


答案 1

一种替代方法是使用该函数将这些添加到可以调用的目标 ArrayList 中。MongoIterable.intocontains("collectionName")

boolean collectionExists = client.getDatabase("dbName").listCollectionNames()
    .into(new ArrayList<String>()).contains("collectionName")

答案 2

你是对的。看起来好像3.0.x版本的MongoDB驱动程序没有通过直接的“集合是否存在?”方法移植到。MongoDatabase

如前所述,您的一个选项是循环访问 的结果。虽然这似乎无效,但它与该方法的实现非常相似。下面的代码片段是从 mongo-java-driver 源代码中的类复制而来的:listCollectionNames()DB.collectionExists(String)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;
}

您也可以通过调用该方法而不是从 中获取。这使您可以访问已弃用的方法。当然,我不建议使用第二种方法,因为如前所述,它已被弃用DBMongoDatabaseMongoClientgetDBcollectionExists

因此,采用迭代方法。listCollectionNames