2016-11-28 2 views
1

C#, 버전 2 이상용 Mongodb 드라이버의 새 버전으로 일부 코드를 업데이트하려고하지만 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(); 
} 

P.S.에 따라 컬렉션의 존재를 확인하실 수 있습니다 방법 GetCollection은 안전합니다. 컬렉션의 존재를 확인할 필요가 없습니다. 그것은 운전사 그 자체에 의해 행해졌 다.

0

이 코드는 내 데이터베이스에 실패

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

나는 다음과 같은 오류 메시지가 얻을 :

UuidLegacy로 이진 하위 유형을 필요로하는 독자의 GuidRepresentation CSharpLegacy입니다, Uuid 표준이 아닙니다.

문제의 컬렉션은 Serilog 용 MongoDb 싱크가 GuidRepresen tation = CSharpLegacy.

이 코드는 (몽고 드라이버의 v 2.5.0입니다.) 문제없이 작동합니다

database.GetCollection<BsonDocument>(collectionName) != null