BSON 操作
Overview
このガイドでは、BSON ドキュメントの作成方法、ファイルからの BSON の読み取り方法、.NET/C# ドライバーを使用したファイルへの BSON の書き込み方法を学習できます。
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" }
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
オブジェクトを受け入れます。つまり、ストリームでアクセスできる任意の場所の読み取りや書き込みができます。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。