Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查mongodb数据库是否存在?_Mongodb_Database - Fatal编程技术网

检查mongodb数据库是否存在?

检查mongodb数据库是否存在?,mongodb,database,Mongodb,Database,是否可以检查mongo数据库allready是否存在?是的,您可以获得现有数据库的列表。从Java驱动程序中,您可以执行类似的操作来获取在本地主机上运行的mongod服务器上的数据库名称 Mongo mongo = new Mongo( "127.0.0.1", 27017 ); List<String> databaseNames = mongo.getDatabaseNames(); 这相当于mongoshell showdbs命令。我确信在所有的驱动程序中都存在类似的方法。对

是否可以检查mongo数据库allready是否存在?

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

Mongo mongo = new Mongo( "127.0.0.1", 27017 );
List<String> databaseNames = mongo.getDatabaseNames();

这相当于mongoshell showdbs命令。我确信在所有的驱动程序中都存在类似的方法。

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

MongoClient mongoClient = new MongoClient();
MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
while(dbsCursor.hasNext()) {
    System.out.println(dbsCursor.next());
}
下面是一个验证是否找到数据库的方法:

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;
}

在python中使用Pymongo

from pymongo import MongoClient

db_name = "foo"
conn = MongoClient('mongodb://localhost,localhost:27017')
db = self.conn[str(db_name)]
if bool(db_name in conn.database_names()):
   collection.drop()

我想添加一个C版本。我用的是MongoDB驱动程序2.2.2

static bool DatabaseExists(string connectionString)
{
    var mongoUri = new MongoUrl(connectionString);
    var client = new MongoClient(mongoUri);

    var dbList = Enumerate(client.ListDatabases()).Select(db => db.GetValue("name").AsString);
    return dbList.Contains(mongoUri.DatabaseName);
}

static IEnumerable<BsonDocument> Enumerate(IAsyncCursor<BsonDocument> docs)
{
    while (docs.MoveNext())
    {
        foreach (var item in docs.Current)
        {
            yield return item;
        }
    }
}

使用MongoDb c驱动程序2.4

    private bool DatabaseExists(string database)
    {
       // _client is IMongoClient
        var dbList = _client.ListDatabases().ToList().Select(db => db.GetValue("name").AsString);
        return dbList.Contains(database);
    }
用法:

        if (!DatabaseExists("FooDb")
        {
            // create and seed db

        }

试试这个,它在MacOSX上对我有效

MongoClient mongoClient = new MongoClient("localhost");
/** **/
boolean dbExist =
    mongoClient.listDatabaseNames().
    into(new ArrayList<String>()).contains("TEST");

System.out.print(dbExist);

上面的PyMongo示例不适用于我,因此我使用更标准的list_databases方法将其重写到MongoClient库中:

从pymongo导入MongoClient db_name=foo conn=MongoClient'mongodb://localhost,localhost:27017' 如果conn.list_数据库中的booldb_名称: 在此处打印true或返回true 其他: 在此处打印false或返回false

如果要明确检查数据库是否存在,请从shell中选择:

db.getMongo().getDBNames().indexOf("mydb");
如果mydb不存在,将返回'-1'

要从shell中使用此命令,请执行以下操作:

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

在我的例子中,我不能使用listDatabaseNames,因为我的用户没有调用此函数的权限。相反,我只是假设它存在并调用该数据库上的一个方法,如果它不存在或缺少权限,则该方法将失败

演示C代码:

/// <summary>
/// Tests the connection to the MongoDB server, and if the database already exists.
/// If not or an error is detected, an exception is thrown.
/// </summary>
public static void TestConnection(string mongoUrl, string mongoDatabase) {
   var client = new MongoClient(mongoUrl);
   var database = client.GetDatabase(mongoDatabase);
   try {
      // Try to perform an action on this database; will fail if it does not exist
      database.ListCollections(); 
   }
   catch {
      throw new Exception("Connection established, " +
         "but database does not exist (or missing rights): " + mongoDatabase);
   }    
}

您使用的是什么语言/驱动程序?对于任何主持人:这个版本的答案是直接针对这个问题定制的。由于奇怪的原因,java中的Ref MongoDatabase database=mongoClient.getDatabaseNAMEDB;如果database==null{…}对于名为'NAMEDB'的不存在的数据库,database不是null,如果我检查database.getName;结果是“NAMEDB”,但“NAMEDB”不存在。