【问题标题】:MongoDB: Getting the list of all databases?MongoDB:获取所有数据库的列表?
【发布时间】:2023-03-24 15:31:01
【问题描述】:

如何使用 Mongo C# 驱动程序列出连接的所有数据库?

【问题讨论】:

  • 或者,从外壳:> show dbs
  • 你可以在cmd上使用show collection命令..!!

标签: mongodb mongodb-.net-driver


【解决方案1】:

很容易:

var server = MongoServer.Create("mongodb://localhost/?safe=true");
var databaseNames = server.GetDatabaseNames();

【讨论】:

    【解决方案2】:

    MongoServer 类在 2.0.0 版中已弃用。

    你可以使用 ListDatabasesAsync

    using (var cursor = await client.ListDatabasesAsync())
    {
        await cursor.ForEachAsync(d => Console.WriteLine(d.ToString()));
    }
    

    【讨论】:

      【解决方案3】:

      工作解决方案:

      MongoClient client = new MongoClient("mongodb://localhost:27017");
      using (IAsyncCursor<BsonDocument> cursor = client.ListDatabases())
      {
          while (cursor.MoveNext())
          {
              foreach (var doc in cursor.Current)
              {
                  Console.WriteLine(doc["name"]); // database name
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        正如 Juri 指出的那样,MongoServer 类在 2.0.0 版本中已被弃用。如果你不想使用异步,我是这样做的:

        var client = new MongoClient("mongodb://" + server_username + ":" + server_password + "@" + server_host + ":" +  server_port);
        
        List<MongoDB.Bson.BsonDocument> databases = client.ListDatabases();
        

        只有一件事。它采用 BsonDocument 格式,包含 2 个元素:“name”和“sizeOnDisk”。

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          我无法通过现有答案验证给定数据库是否存在,所以这是我的看法:

              // extension method on IMongoClient
              public static IMongoClient AssertDbExists(this IMongoClient client, string dbName)
              {
                  bool dbFound = false;
          
                  using(var cursor = client.ListDatabases())
                  {
                      var databaseDocuments = cursor.ToList();
                      foreach (var db in databaseDocuments)
                      {
                          if (db["name"].ToString().Equals(dbName))
                          {
                              dbFound = true;
                              break;
                          }
                      }
                  }
          
                  if (!dbFound) throw new ArgumentException("Can't connect to a specific database with the information provided", nameof(MongoSettings.ConnectionString));
          
                  return client;
              }
          

          然后像这样使用它:

          // either you get the client with the DB validated or throws
          _client = new MongoClient(settings.ConnectionString).AssertDbExists(_dbName);
          

          使用: Mongo官方C#驱动v2.4.4

          【讨论】:

            猜你喜欢
            • 2013-01-27
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            • 1970-01-01
            • 2016-07-08
            • 2014-02-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多