MongoDB 3 Java检查集合是否存在

时间:2015-08-09 22:00:32

标签: java mongodb

我有以下问题:

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

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

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

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

感谢您的帮助

6 个答案:

答案 0 :(得分:17)

你是对的。似乎3.0.x版本的MongoDB驱动程序没有将{收集存在?“方法移植到MongoDatabase

正如您已经提到的,一个选项是迭代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;
}

您还可以通过调用DB方法从MongoDatabase获取MongoClient而不是getDB。这样,您就可以访问已弃用的collectionExists方法 。当然,我不推荐第二种方法,因为如上所述,已弃用

因此,请通过listCollectionNames方法进行迭代。

答案 1 :(得分:13)

另一种方法是使用MongoIterable.into函数将这些函数添加到您可以调用contains("collectionName")的目标ArrayList。

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

答案 2 :(得分:1)

当我试图找出一种检查集合是否存在的有效方法时,我发现了这篇文章。由于我的数据库中有超过50k的集合,因此使用listCollectionNames()方法的效率非常低。

我所做的是使用db.collection.count()方法,如果它返回非零值,那么我会将其视为不存在的集合。当然,这不是百分之百正确的,因为一个人可以拥有一个零条目的集合,这种方法会将其视为一个不存在的集合。但是对于MongoDB中的大多数场景,只有在至少有一个文档的情况下,集合才有意义。以下是示例代码

public boolean isCollectionExists(DB db, String collectionName) 
{

    DBCollection table = db.getCollection(collectionName);
    return (table.count()>0)?true:false;
}

答案 3 :(得分:1)

对于仍在寻找的人: 假设你有一个名为&#34; db&#34;

的MongoDatabase实例
try {
        db.createCollection("myCol");
    } catch (MongoCommandException e) {
        System.err.println("Collection Exists");
    }

答案 4 :(得分:0)

我在搜索完全相同的问题时发现了这篇文章。使用最新的驱动程序,即:

<!-- Mongo driver, GeoJson with Jackson, Gson for Mongo (Jongo) -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.3.0</version>
</dependency>

有人可能想要使用:

public boolean collectionExists(final String db, final String collectionName) {
    final MongoDatabase database = client.getDatabase(db);
    if (database == null) {
            return false;
    }

    final MongoIterable<String> iterable = database.listCollectionNames();
    try (final MongoCursor<String> it = iterable.iterator()) {
        while (it.hasNext()) {
            if (it.next().equalsIgnoreCase(collectionName)) {
                return true;
            }
        }
    }

    return false;
}

答案 5 :(得分:0)

MongoIterable <String> collection =  database.listCollectionNames();
    for(String s : collection) {
        if(s.equals("collectionName")) {
            return true;

        }
    }
    return false;
}