【问题标题】:Check if mongodb database exists?检查mongodb数据库是否存在?
【发布时间】:2011-08-13 09:50:04
【问题描述】:

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

【问题讨论】:

  • 您使用什么语言/驱动程序?

标签: mongodb database


【解决方案1】:

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

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

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

【讨论】:

  • 出于奇怪的原因 MongoDatabase database = mongoClient.getDatabase("NAMEDB"); if (database == null) {...} database is not NULL 对于不存在的名为 'NAMEDB' 的数据库,如果我检查 database.getName());结果我有“NAMEDB”,但“NAMEDB”不存在。
【解决方案2】:

如果您想从 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

【讨论】:

    【解决方案3】:

    对于因为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;
    }
    

    【讨论】:

    【解决方案4】:

    在 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()
    

    【讨论】:

      【解决方案5】:

      使用 MongoDb c# Driver 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
      
              }
      

      【讨论】:

        【解决方案6】:

        我想添加一个 C# 版本。我正在使用 MongoDB.Driver 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;
                }
            }
        }
        

        【讨论】:

          【解决方案7】:

          试试这个,它对我有用(在 Mac OSx 上)

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

          【讨论】:

            【解决方案8】:

            上面的 PyMongo 示例对我不起作用,因此我使用更标准的 list_databases() 方法将其重写为 MongoClient 库:

            from pymongo import MongoClient db_name = "foo" conn = MongoClient('mongodb://localhost,localhost:27017') if bool(db_name in conn.list_databases()): print true # or return true here else: print false # or return false here

            【讨论】:

              【解决方案9】:

              在我的例子中,我不能使用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);
                 }    
              }
              

              【讨论】:

                猜你喜欢
                • 2021-11-30
                • 2014-07-08
                • 2019-06-24
                • 2014-04-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多