MongoDB 3 Java检查集合是否存在

Fro*_*ozn 17 java mongodb

我有以下问题:

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

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

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

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

谢谢你的帮助

why*_*ite 18

你是对的.似乎3.0.x版本的MongoDB驱动程序没有通过直接" 存在集合? "方法移植到MongoDatabase.

正如您已经提到的,一个选项是迭代结果listCollectionNames().虽然这似乎无效,但它与该方法的实现非常相似DB.collectionExists(String).下面的代码片段从复制DB.java蒙戈-java的驱动源:

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

你也可以得到DB,而不是MongoDatabaseMongoClient调用getDB方法.这使您可以访问不推荐使用collectionExists方法.当然,我不推荐第二种方法,因为如上所述,它已被弃用.

因此,请继续使用迭代listCollectionNames方法.

  • @zeugor您引用的代码(包含`equalsIngoreCase`)直接来自MongoDB的驱动程序源代码.我不确定为什么他们会忽略这个案子,因为正如你所指出的,集合名称区分大小写.但请注意,Mongodb不赞成这种方法. (2认同)

小智 15

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

boolean collectionExists = client.getDatabase("dbName").listCollectionNames()
    .into(new ArrayList<String>()).contains("collectionName")
Run Code Online (Sandbox Code Playgroud)