2016-11-28 68 views
1

我试图更新一些代码到新版本的Mongodb驱动程序的c#,版本2或更新,但似乎CollectionExists()方法已被弃用,它曾经在旧版本中工作,但现在不再。我如何知道新驱动程序是否已经存在一个集合?如何知道集合是否存在Mongodb C#版本2或更旧

public static IMongoCollection<T> GetCollectionSafe<T>(string collectionName) 
{     
    var db = GetDatabase(); 
    if (!db.CollectionExists(collectionName)) //throws error 
    { 
     db.CreateCollection(collectionName); 
    } 
    return db.GetCollection<T>(collectionName); 
} 

GetDatabase()IMongoDatabase类型。我只想知道某个名称的集合是否存在。

回答

0

您可以通过下面的代码

public async Task<bool> CheckCollection(IMongoDatabase database, string collectionName) 
{ 
    var filter = new BsonDocument("name", collectionName); 
    var collectionCursor = await database.ListCollectionsAsync(new ListCollectionsOptions {Filter = filter}); 
    return await collectionCursor.AnyAsync(); 
} 

附注:检查收集的存在方法GetCollection是安全的使用。您不需要检查集合的存在。它是由驱动程序自己完成的。

0

该代码失败在我的数据库:

database.ListCollections(new ListCollectionsOptions { 
    Filter = new BsonDocument { { "name", collectionName } } }) 

我收到以下错误信息:

为读者GuidRepresentation是CSharpLegacy,这需要 二进制子类型为UuidLegacy,不UuidStandard

有问题的集合创建了与Guid的Serilog的MongoDb接收器RepRepresen tation = CSharpLegacy。

此代码的工作没有问题(与蒙戈驱动器V 2.5.0。):

database.GetCollection<BsonDocument>(collectionName) != null 
相关问题