2016-11-28 67 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 
相關問題