MongoDBのC#ドライバ(2.4.4)で出たバグとその回避

 このブログのTravisCIで行っているテストがコケた。原因を追っていたら、MongoDBのC#ドライバの2.4.4.にバグがあった。

 データベースからコレクションリストをそのまま取得しようとするとエラーが出る。
var collections = db.ListCollections();


Unhandled Exception: System.FormatException: The GuidRepresentation for the reader is CSharpLegacy, which requires the binary sub type to be UuidLegacy, not UuidStandard.




 ドライバのバージョンが2.5で修正されているらしいが、2.5のリリース日程が見当たらない。Githubのリポジトリを見ても2.4.xまでしかブランチがない。ドライバのバージョンを下げずに今すぐどうにかならんかと。

 もともとListCollectionsでやっていたのは、コレクション一覧を取得してからの、任意の名前のコレクションがそこにあるかの確認。
var collections = DbConnection.db.ListCollections().ToList().Select(c => c["name"].AsString);


 ちょっとコードを変えたらエラーを回避できた。
var filter = new BsonDocument("name", collectionName);

var isExist = DbConnection.db.ListCollections(new ListCollectionsOptions { Filter = filter }).Any();


 もとはコレクションをリストで取ってきて、LINQでふるいをかけて、任意の名前のコレクションがあるかを確認していた。それを、コレクションでリストを取ってくるときにドライバ側で用意されたオプションを使って、ドライバで用意されたもので完結するように書き換えた。
comment: 0