Docs Menu
Docs Home
/ / /
C#/.NET
/

BSON 操作

項目一覧

  • Overview
  • BSON データ形式
  • BSON ドキュメントの作成
  • BSON ドキュメントの変更
  • BSON をファイルに書き込む
  • ファイルからの BSON を読み込む
  • API ドキュメント

このガイドでは、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 引数を受け入れます。 各 BsonElementBsonElement クラスのインスタンスでも、中括弧({})で囲まれたフィールド値ペアでもかまいません。

次のコード サンプルは、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オブジェクトを受け入れます。つまり、ストリームでアクセスできる任意の場所の読み取りや書き込みができます。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

LINQ