Overview
このガイドでは、BSON ドキュメントの作成方法、ファイルからの BSON の読み取り方法、.NET/C# ドライバーを使用したファイルへの BSON の書き込み方法を学習できます。
BSON データ形式
BSON, or Binary JSON, is the data format that MongoDB uses to organize and store data. このデータ形式には、すべての JSON データ構造タイプが含まれ、日付、異なるサイズの整数、ObjectId、バイナリ データなどのタイプのサポートが追加されています。 サポートされているタイプの完全なリストについては、 BSON typesサーバーのマニュアル ページを参照してください。
このガイドのコード サンプルでは、次の BSON ドキュメントを例として使用します。
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
BSON ドキュメントの作成
C#でBSONドキュメントの表現を構築するには、BsonDocumentクラスのインスタンスを作成します。BsonDocument コンストラクターは、ドキュメント内のフィールドと値にマッピングする BsonElement 引数を受け入れます。各 BsonElement は、BsonElementクラスのインスタンス、または、中括弧({})で囲まれたフィールドと値のペアのどちらでもかまいません。
次のコード サンプルは、BSON ドキュメント例を表すBsonDocumentオブジェクトを作成する方法を示しています。BsonDocumentオブジェクト内のキー バリュー ペアはBsonElementオブジェクトです。
var newRestaurant = new BsonDocument { { "address", new BsonDocument { { "street", "Pizza St" }, { "zipcode", "10003" } } }, { "coord", new BsonArray {-73.982419, 41.579505 } }, { "cuisine", "Pizza" }, { "name", "Mongo's Pizza"} };
BSON ドキュメントの変更
BsonDocumentクラスには、BSON ドキュメントの内容を変更できるメソッドが含まれています。次のコード サンプルでは、前のBsonDocumentオブジェクトに 3 つの変更を加えます。
値
"12345"を持つ新しいフィールド"restaurant_id"を追加します。"cuisine"フィールドを削除します。"name"フィールドの値を"Mongo's Pizza Palace"に設定します。
var newRestaurant = new BsonDocument { { "address", new BsonDocument { { "street", "Pizza St" }, { "zipcode", "10003" } } }, { "coord", new BsonArray {-73.982419, 41.579505 } }, { "cuisine", "Pizza" }, { "name", "Mongo's Pizza"} }; newRestaurant.Add(new BsonElement("restaurant_id", "12345")); newRestaurant.Remove("cuisine"); newRestaurant.Set("name", "Mongo's Pizza Palace");
注意
BsonDocumentクラスのメソッドの完全なリストについては、 API ドキュメントを参照してください。
BSON をファイルに書き込む
BsonBinaryWriterクラスのメソッドを使用して、BSON をファイルに書き込むことができます。ファイルに書き込むには、次の手順を実行します。
BSON データを含むファイルのファイル ストリームを開きます。
ファイルストリームを使用して
BsonBinaryWriterを作成します。作成する BSON ドキュメントとサブドキュメントごとに、
WriteStartDocument()を呼び出します。各BSONドキュメントとサブドキュメント内で、
WriteName()を呼び出してフィールド名を設定し、適切なWrite*メソッドでその値を設定します。各データ型に対応する専用のWrite*メソッドを使用します。配列の開始と終了には
WriteStartArray()とWriteEndArray()を使用します。各ドキュメントとサブドキュメントの最後に、
WriteEndDocument()を呼び出します。
次のコード サンプルは、サンプル BSON ドキュメントをmyFile.bsonに書き込む方法を示しています。
string outputFileName = "myFile.bson"; using (var stream = File.OpenWrite(outputFileName)) using (var writer = new BsonBinaryWriter(stream)) { writer.WriteStartDocument(); //address writer.WriteName("address"); writer.WriteStartDocument(); writer.WriteName("street"); writer.WriteString("Pizza St"); writer.WriteName("zipcode"); writer.WriteString("10003"); writer.WriteEndDocument(); //coord writer.WriteName("coord"); writer.WriteStartArray(); writer.WriteDouble(-73.982419); writer.WriteDouble(41.579505); writer.WriteEndArray(); //cuisine writer.WriteName("cuisine"); writer.WriteString("Pizza"); //name writer.WriteName("name"); writer.WriteString("Mongo's Pizza"); writer.WriteEndDocument(); }
結果の BSON ドキュメントは次のようになります。
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
ファイルからの BSON を読み込む
ファイルからBSONドキュメントを読み込むには、BSONドキュメントをファイルに書き込むのと同じ手順に従ってください:
BsonBinaryWriterの代わりにBsonBinaryReaderを使用します。Write*メソッドの代わりにRead*メソッドを使用します。これらのメソッドは、BSON ドキュメントからフィールド名と値を返します。
次のコード サンプルは、 myFile.bsonに保存されているサンプル BSON ドキュメントからフィールドと値を読み込む方法を示しています。
string inputFileName = "myFile.bson"; using (var stream = File.OpenRead(inputFileName)) using (var reader = new BsonBinaryReader(stream)) { reader.ReadStartDocument(); //address string addressFieldName = reader.ReadName(); reader.ReadStartDocument(); string streetFieldName = reader.ReadName(); string streetValue = reader.ReadString(); string zipFieldName = reader.ReadName(); string zipValue = reader.ReadString(); reader.ReadEndDocument(); //coord string coordFieldName = reader.ReadName(); reader.ReadStartArray(); double coord1 = reader.ReadDouble(); double coord2 = reader.ReadDouble(); reader.ReadEndArray(); //cuisine string cuisineFieldName = reader.ReadName(); string cuisineValue = reader.ReadString(); //name string nameFieldName = reader.ReadName(); string nameValue = reader.ReadString(); reader.ReadEndDocument(); }
警告
値を読み込まずにReadName() を 2 回続けて呼び出すと、ドライバーはInvalidOperationExceptionをスローします。
Tip
BsonBinaryReaderおよびBsonBinaryWriterコンストラクタは任意のSystem.IO.Streamオブジェクトを受け入れます。つまり、ストリームでアクセスできる任意の場所の読み取りや書き込みができます。
その他の形式の読み取りと書込み
上記の例は、BsonBinaryReader クラスと BsonBinaryWriter クラスを使用してBSONデータの読み取りと書き込みを行う方法を示しています。これらのクラスは IBsonReader インターフェースと IBsonWriter インターフェースを実装します。他の形式でデータを読み取りと書き込みするために、 .NET/ C#ドライバーは IBsonReader インターフェースと IBsonWriter インターフェースの次の代替実装を提供します。
JsonReaderおよびJsonWriter: JSONデータの読み取りと書込みBsonDocumentReaderとBsonDocumentWriter:BsonDocumentオブジェクトに含まれるBSONデータの読み取りと書込み
これらのクラスは同じインターフェースを実装するため、前述の BsonBinaryReader と BsonBinaryWriter の例と同じ方法でそれらのメソッドを呼び出すことができます。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。