检查mongodb数据库是否存在?

Mno*_*Ani 11 database mongodb

是否有可能检查mongo数据库是否已经存在?

小智 14

是的,您可以获取现有数据库的列表.从Java驱动程序中,您可以执行类似的操作,以获取在localhost上运行的mongod服务器上的数据库名称

Mongo mongo = new Mongo( "127.0.0.1", 27017 );
List<String> databaseNames = mongo.getDatabaseNames();
Run Code Online (Sandbox Code Playgroud)

这相当于mongo shell"show dbs"命令.我相信所有驱动程序中都存在类似的方法.

  • 出于奇怪的原因 MongoDatabase database = mongoClient.getDatabase("NAMEDB"); if (database == null) {...} database is not NULL for inexisting DB'namedb' and if I check database.getName()); 结果是“NAMEDB”,但“NAMEDB”不存在。 (2认同)

Gam*_*ega 5

对于因该方法已弃用/不可用而来到这里的任何人getDatabaseNames();,以下是获取现有数据库列表的新方法:

MongoClient mongoClient = new MongoClient();
MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
while(dbsCursor.hasNext()) {
    System.out.println(dbsCursor.next());
}
Run Code Online (Sandbox Code Playgroud)

这是验证是否找到数据库的方法:

public Boolean databaseFound(String databaseName){
    MongoClient mongoClient = new MongoClient(); //Maybe replace it with an already existing client
    MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
    while(dbsCursor.hasNext()) {
        if(dbsCursor.next().equals(databaseName))
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)


leu*_*cos 5

从外壳程序中,如果要显式检查数据库是否存在:

db.getMongo().getDBNames().indexOf("mydb");
Run Code Online (Sandbox Code Playgroud)

如果“ mydb”不存在,将返回“ -1”。

要从外壳程序使用它:

if [ $(mongo localhost:27017 --eval 'db.getMongo().getDBNames().indexOf("mydb")' --quiet) -lt 0 ]; then
    echo "mydb does not exist"
else
    echo "mydb exists"
fi
Run Code Online (Sandbox Code Playgroud)