Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#驱动程序检查MongoDB中是否存在集合?_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

如何使用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

在C#中是否有任何方法可以检查我的MongoDB数据库中是否已经存在具有特定名称的集合?

您可以这样做:


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;
}