mongodb 获取集合名称 c#
mongodb obtaining collection names c#
我正在尝试获取所有数据库的列表以及使用 Mongo C# 驱动程序连接的关联集合列表。
foreach (string database in server.GetDatabaseNames())
{
var db = client.GetDatabase(database);
var col = ((MongoDatabase)db).GetCollectionNames();
//Do something
}
我可以获取数据库列表,但不能获取集合名称。它没有过去
((MongoDatabase)db).GetCollectionNames();
我可能遗漏了什么?
MongoDB 版本 2.6
mongodb-csharp 驱动程序:2.1.1
尝试:
//user: root pwd:pwd dbName:admin
try
{
var client = new MongoClient("mongodb://root:pwd@localhost/admin");
var db = client.GetDatabase("admin");
foreach (var item in db.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result)
{
Console.WriteLine(item.ToString());
}
} catch (Exception ex)
{
throw ex;
}
重要:用户'root'必须存在于数据库
中
以管理员身份在 cmd 上
C:\yourMongoServer\bin>mongo.exe --port 27017
use admin
db.createUser(
{
user: "root",
pwd: "pwd",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
这就是我解决这个问题的方法,因为接受的答案对我不起作用。
MongoDb 版本 3.4.0.
C# 驱动程序版本 2.4.3.23.
public List<string> GetCollections()
{
List<string> collections = new List<string>();
foreach (BsonDocument collection in _database.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result)
{
string name = collection["name"].AsString;
collections.Add(name);
}
return collections;
}
MongoDB 版本: 3.4.6,
C# 驱动程序版本:2.4.4
工作解决方案:
using (IAsyncCursor<BsonDocument> dbCursor = client.ListDatabases())
{
while (dbCursor.MoveNext())
{
foreach (var dbDoc in dbCursor.Current)
{
Console.WriteLine("-----{0}-----", dbDoc["name"]);
var dbName = dbDoc["name"].ToString(); // list database name
using (IAsyncCursor<BsonDocument> collectionCursor = client.GetDatabase(dbName).ListCollections())
{
while (collectionCursor.MoveNext())
{
foreach (var collDoc in collectionCursor.Current)
{
Console.WriteLine(collDoc["name"]); // list collection name
}
}
}
}
}
}
在 MongoDB C# 驱动程序中,您有异步方法和 return 异步游标的“同步”方法。
这允许这种紧凑的代码:
List<string> collections = await (new MongoDB.Driver.MongoClient())
.GetDatabase("test")
.ListCollectionNames()
.ToListAsync();
我正在尝试获取所有数据库的列表以及使用 Mongo C# 驱动程序连接的关联集合列表。
foreach (string database in server.GetDatabaseNames())
{
var db = client.GetDatabase(database);
var col = ((MongoDatabase)db).GetCollectionNames();
//Do something
}
我可以获取数据库列表,但不能获取集合名称。它没有过去
((MongoDatabase)db).GetCollectionNames();
我可能遗漏了什么?
MongoDB 版本 2.6
mongodb-csharp 驱动程序:2.1.1
尝试:
//user: root pwd:pwd dbName:admin
try
{
var client = new MongoClient("mongodb://root:pwd@localhost/admin");
var db = client.GetDatabase("admin");
foreach (var item in db.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result)
{
Console.WriteLine(item.ToString());
}
} catch (Exception ex)
{
throw ex;
}
重要:用户'root'必须存在于数据库
中以管理员身份在 cmd 上
C:\yourMongoServer\bin>mongo.exe --port 27017
use admin
db.createUser(
{
user: "root",
pwd: "pwd",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
这就是我解决这个问题的方法,因为接受的答案对我不起作用。
MongoDb 版本 3.4.0.
C# 驱动程序版本 2.4.3.23.
public List<string> GetCollections()
{
List<string> collections = new List<string>();
foreach (BsonDocument collection in _database.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result)
{
string name = collection["name"].AsString;
collections.Add(name);
}
return collections;
}
MongoDB 版本: 3.4.6, C# 驱动程序版本:2.4.4
工作解决方案:
using (IAsyncCursor<BsonDocument> dbCursor = client.ListDatabases())
{
while (dbCursor.MoveNext())
{
foreach (var dbDoc in dbCursor.Current)
{
Console.WriteLine("-----{0}-----", dbDoc["name"]);
var dbName = dbDoc["name"].ToString(); // list database name
using (IAsyncCursor<BsonDocument> collectionCursor = client.GetDatabase(dbName).ListCollections())
{
while (collectionCursor.MoveNext())
{
foreach (var collDoc in collectionCursor.Current)
{
Console.WriteLine(collDoc["name"]); // list collection name
}
}
}
}
}
}
在 MongoDB C# 驱动程序中,您有异步方法和 return 异步游标的“同步”方法。 这允许这种紧凑的代码:
List<string> collections = await (new MongoDB.Driver.MongoClient())
.GetDatabase("test")
.ListCollectionNames()
.ToListAsync();