Check if mongodb database exists?

前端 未结 9 1478
孤街浪徒
孤街浪徒 2020-12-14 21:58

Is there a possibility to check if a mongo database allready exists?

相关标签:
9条回答
  • 2020-12-14 22:27

    I'd like to add a C# version. I'm using the 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;
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 22:27

    Try this, it worked for me (on Mac OSx)

    MongoClient mongoClient = new MongoClient("localhost");
    /** **/
    boolean dbExist =
        mongoClient.listDatabaseNames().
        into(new ArrayList<String>()).contains("TEST");
    
    System.out.print(dbExist);
    
    0 讨论(0)
  • 2020-12-14 22:29

    For anyone who comes here because the method getDatabaseNames(); is depreciated / not available, here is the new way to get the list of existing databases:

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

    Here is a method that validates if the database is found:

    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;
    }
    
    0 讨论(0)
  • 2020-12-14 22:38

    From the shell, if you want to explicitely check that a DB exists:

    db.getMongo().getDBNames().indexOf("mydb");
    

    Will return '-1' if "mydb" does not exist.

    To use this from the 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
    
    0 讨论(0)
  • 2020-12-14 22:41

    in python using 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()
    
    0 讨论(0)
  • 2020-12-14 22:43

    In my case, I could not use listDatabaseNames, because my user did not have the rights to call this function. Instead, I just assume that it exists and call a method on this database, which will fail if it does not exist or if rights are missing.

    Demo C# code:

    /// <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);
       }    
    }
    
    0 讨论(0)
提交回复
热议问题