AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

BSON 操作

このガイドでは、BSON ドキュメントの作成方法、ファイルからの BSON の読み取り方法、.NET/C# ドライバーを使用したファイルへの BSON の書き込み方法を学習できます。

BSON(Binary JSON)は、MongoDB がデータを整理して保存するために使用するデータ形式です。このデータ形式には、すべての JSON データ構造タイプが含まれ、日付、異なるサイズの整数、ObjectId、バイナリ データなどのタイプのサポートが追加されています。サポートされているタイプの完全なリストについては、 BSON types サーバーのマニュアル ページを参照してください。

このガイドのコード サンプルでは、次の BSON ドキュメントを例として使用します。

{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza"}

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"}};

BsonDocumentクラスには、BSON ドキュメントの内容を変更できるメソッドが含まれています。次のコード サンプルでは、前のBsonDocumentオブジェクトに 3 つの変更を加えます。

  1. 値 "12345" を持つ新しいフィールド "restaurant_id" を追加します。

  2. "cuisine"フィールドを削除します。

  3. "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 ドキュメントを参照してください。

BsonBinaryWriterクラスのメソッドを使用して、BSON をファイルに書き込むことができます。ファイルに書き込むには、次の手順を実行します。

  1. BSON データを含むファイルのファイル ストリームを開きます。

  2. ファイルストリームを使用して BsonBinaryWriter を作成します。

  3. 作成する BSON ドキュメントとサブドキュメントごとに、 WriteStartDocument()を呼び出します。

  4. 各BSONドキュメントとサブドキュメント内で、WriteName() を呼び出してフィールド名を設定し、適切な Write* メソッドでその値を設定します。各データ型に対応する専用の Write* メソッドを使用します。

  5. 配列の開始と終了には WriteStartArray() と WriteEndArray() を使用します。

  6. 各ドキュメントとサブドキュメントの最後に、 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ドキュメントをファイルに書き込むのと同じ手順に従ってください:

  • 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 ドキュメントを参照してください。