如何使用C#驱动程序检查MongoDB中是否存在集合?

mcl*_*sen 21 c# mongodb mongodb-.net-driver

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

Ofi*_*fir 47

@ im1dermike回答不再适用于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();
    }
Run Code Online (Sandbox Code Playgroud)

  • 一个不需要`return(等待collections.ToListAsync()).Any();`,只是`返回await collections.AnyAsync();`很好 (3认同)
  • 使用“GetDatabase().ListCollectionNamesAsync(...)”而不是“GetDatabase().ListCollectionsAsync(...)”。因为仅返回名称和类型(视图或集合)不会采用集合级锁,而返回完整集合信息会锁定数据库中的每个集合。详细信息:https://docs.mongodb.com/manual/reference/command/listCollections/ (2认同)

Arn*_*kas 6

@Ofir的答案是正确的。这是围绕ListCollectionNamesAPI 构建的同步替代方案:

public bool CollectionExists(IMongoDatabase database, string collectionName)
{
    var filter = new BsonDocument("name", collectionName);
    var options = new ListCollectionNamesOptions { Filter = filter };

    return database.ListCollectionNames(options).Any();
}
Run Code Online (Sandbox Code Playgroud)


im1*_*ike 5

你可以这样做:

database.GetCollection("blah").Exists()

  • 这不再适用于2.0版 (35认同)
  • 这是错误的答案,应该更改。我不知道它以前是否存在过,但是从“MongoDB.Driver v2.11.0”开始,“.Exists()”不存在 (6认同)
  • 编译错误:不包含“Exists”的定义? (2认同)