如何使用C#驱动程序检查MongoDB中是否存在集合?
在C#中是否有任何方法可以检查我的MongoDB数据库中是否已经存在具有特定名称的集合?您可以这样做:如何使用C#驱动程序检查MongoDB中是否存在集合?,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,在C#中是否有任何方法可以检查我的MongoDB数据库中是否已经存在具有特定名称的集合?您可以这样做: database.GetCollection(“blah”).Exists()@im1dermike-answer不再适用于c#驱动程序2.0版+ 这里有一个替代方案: public async Task<bool> CollectionExistsAsync(string collectionName) { var filter = new Bso
database.GetCollection(“blah”).Exists()
@im1dermike-answer不再适用于c#驱动程序2.0版+
这里有一个替代方案:
public async Task<bool> CollectionExistsAsync(string collectionName)
{
var filter = new BsonDocument("name", collectionName);
//filter by collection name
var collections = await GetDatabase().ListCollectionsAsync(new ListCollectionsOptions { Filter = filter });
//check for existence
return await collections.AnyAsync();
}
公共异步任务CollectionExistsAsync(字符串collectionName)
{
var filter=新的BsonDocument(“name”,collectionName);
//按集合名称筛选
var collections=await GetDatabase().ListCollectionsAsync(新ListCollectionsOptions{Filter=Filter});
//检查是否存在
return wait collections.AnyAsync();
}
他们的答案是正确的。下面是围绕ListCollectionNames
API构建的同步替代方案:
public bool CollectionExists(IMongoDatabase database, string collectionName)
{
var filter = new BsonDocument("name", collectionName);
var options = new ListCollectionNamesOptions { Filter = filter };
return database.ListCollectionNames(options).Any();
}
上面的答案是正确的,但这里有另一种使用最新驱动程序的方法(MongoDB.driver 2.11.6)
公共异步任务IsCollectionExistsAsync(string collectionName)
{
MongoClient dbClient=new(_connectionString);
IMongoDatabase=dbClient.GetDatabase(_databaseName);
IMongoCollection mongoCollection=database.GetCollection(collectionName);
if(mongoCollection!=null)
{
返回true;
}
返回false;
}
@frontsidebus,请参阅我的答案bellow编译错误:不包含“Exists”的定义,或在返回db.listcollectionasync(new listcollectionoptions{Filter=new BsonDocument(“name”,fCollectionName)})的行中。Result.Any();如果没有异步,这是错误的答案,应该更改。我不知道它以前是否存在过,但是.Exists()
在MongoDB.Driver v2.11.0
时不存在,不需要返回(wait collections.ToListAsync()).Any()
,只需返回wait collections.AnyAsync()代码>是fine@DineiRockenbach,感谢您的反馈-我已经更新了我的答案,使用GetDatabase().ListCollectionNamesAsync(…)
而不是GetDatabase().ListCollectionsAsync(…)
。因为仅返回名称和类型(视图或集合)不会获得集合级锁,而返回完整集合信息会锁定数据库中的每个集合。细节:
public async Task<bool> IsCollectionExistsAsync(string collectionName)
{
MongoClient dbClient = new(_connectionString);
IMongoDatabase database = dbClient.GetDatabase(_databaseName);
IMongoCollection<BsonDocument> mongoCollection = database.GetCollection<BsonDocument>(collectionName);
if (mongoCollection != null)
{
return true;
}
return false;
}