C# を使用して MongoDB の bson を読み込んでみた。
MongoDB の操作用 DLL をプロジェクトに取り込み、bson ファイルを読み込むことになる。
ハマったのが、必要なデータのみを読もうとするとエラーになるとうところ。不要なデータを Read した上で捨てる処理が必要。DoAwayReadValue() のような処理が必要とだった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using MongoDB.Bson; using MongoDB.Bson.IO; // ※本クラスは、正式版から抜粋した内容であるため、このままでは動作しません。 class Test { private void AnalyzeSystemBson(ZipEntry entry) { entry.Extract(extractedDirectory); string extractedFilePath = Path.Combine(extractedDirectory, entry.FileName); using (Stream stream = File.OpenRead(extractedFilePath)) { using (var reader = new BsonBinaryReader(stream)) { while (!reader.IsAtEndOfFile()) { string email = null; int type = -1; reader.ReadStartDocument(); while (reader.ReadBsonType() != BsonType.EndOfDocument) { string fieldName = reader.ReadName(); if (fieldName.Equals("email")) { email = reader.ReadString(); } else if (fieldName.Equals("type")) { type = reader.ReadInt32(); } else { DoAwayReadValue(reader); } } //modelDictionary[email] = type; reader.ReadEndDocument(); } } } } private static void DoAwayReadValue(BsonBinaryReader reader) { switch (reader.GetCurrentBsonType()) { case BsonType.ObjectId: reader.ReadObjectId(); break; case BsonType.String: reader.ReadString(); break; case BsonType.Int32: reader.ReadInt32(); break; } } } |