Docs Menu
Docs Home
/ /

BSON

このガイドでは、 BSONドキュメントの作成方法、 BSONドキュメントをファイルに書き込む方法、 Cドライバーを使用してファイルからBSONデータを読み込む方法を学習できます。

BSON, or Binary JSON, is the data format that MongoDB uses to organize and store data. このデータ形式には、すべての JSON データ構造タイプが含まれ、日付、異なるサイズの整数、ObjectId、バイナリ データなどのタイプのサポートが追加されています。 サポートされているタイプの完全なリストについては、 BSON typesサーバーのマニュアル ページを参照してください。

libbsonパッケージを含めることで、 CアプリケーションでBSONドキュメントを使用できます。

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

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

BSONドキュメントは、 Cドライバーでは bson_t 型によって表されます。 BCON_NEW() 関数を使用して bson_tインスタンスを作成できます。次の例では、サンプルBSONドキュメントの bson_t 表現を作成します。

bson_t *doc = BCON_NEW( "address", "{",
"street", BCON_UTF8("Pizza St"),
"zipcode", BCON_UTF8("10003"), "}",
"coord", "[", BCON_DOUBLE(-73.982419), BCON_DOUBLE(41.579505), "]",
"cuisine", BCON_UTF8("Pizza"),
"name", BCON_UTF8("Mongo's Pizza")
);

注意

BSONフィールド値

BSONドキュメントにフィールドを作成または追加する場合は、適切なBCON_* 関数を使用してフィールド値を正しく表現していることを確認してください。BCON_* 関数の完全なリストについては、 Cドライバー GitHubリポジトリの bson-bcon.hファイル を参照してください。

BCON_APPEND() 関数を使用して、既存の bson_tインスタンスにフィールドと値のペアを追加できます。次の例では、サンプルBSONドキュメントに新しい yearEstablishedフィールドと値を追加します。

BCON_APPEND(doc, "yearEstablished", BCON_INT32(1996));

追加する値のデータ型に対応する bson_append_* 関数を使用することもできます。次の例では、 bson_append_int32() 関数を使用して、前の例と同じフィールドと値のペアを追加します。

bson_append_int32(doc, "yearEstablished", -1, 1996);

bson_append_*関数の完全なリストについては、 libbsonAPIドキュメントの bson_t を参照してください。

標準のCファイルI/O ライブラリで bson_get_data() 関数を使用して、 BSONデータをファイルに書込むことができます。次の例では、サンプルBSONドキュメントをoutput.bson という名前のファイルに書き込みます。

FILE *fp;
if ((fp = fopen("output.bson", "wb"))) {
fwrite(bson_get_data(doc), 1, doc->len, fp);
fclose(fp);
} else {
fprintf(stderr, "Failed to open file for writing.\n");
return EXIT_FAILURE;
}

bson_reader_t タイプを使用して、ファイル、メモリ リージョン、またはカスタムコールバックからBSONドキュメントのシーケンスを読み取ることができます。次の例では、example.bson という名前のファイルからBSONドキュメントを読み取り、各ドキュメントのJSON表現を出力します。

bson_reader_t *reader;
bson_error_t error;
const bson_t *b;
char *str;
if (!((reader = bson_reader_new_from_file("example.json", &error)))) {
fprintf(stderr, "Failed to open file: %s\n", error.message);
return EXIT_FAILURE;
}
while ((b = bson_reader_read(reader, NULL))) {
str = bson_as_canonical_extended_json(b, NULL);
fprintf(stdout, "%s\n", str);
bson_free(str);
}
bson_reader_destroy(reader);

bson_json_reader_t タイプを使用してJSONドキュメントのシーケンスを読み取り、bson_t ドキュメントに変換できます。次の例では、example.json という名前のファイルからJSONドキュメントを読み取り、各ドキュメントをBSON形式に変換してドキュメントを出力します。

bson_json_reader_t *reader;
int b;
bson_error_t error;
bson_t doc = BSON_INITIALIZER;
if (!((reader = bson_json_reader_new_from_file("example.json", &error)))) {
fprintf(stderr, "Failed to open file: %s\n", error.message);
return EXIT_FAILURE;
}
while ((b = bson_json_reader_read(reader, &doc, &error))) {
if (b < 0) {
fprintf(stderr, "Failed to parse JSON: %s\n", error.message);
abort();
}
if (fwrite(bson_get_data(&doc), 1, doc.len, stdout) != doc.len) {
fprintf(stderr, "Failed to write BSON to stdout, exiting.\n");
exit(1);
}
bson_reinit(&doc);
}
bson_json_reader_destroy(reader);
bson_destroy(&doc);

次の例に示すように、bson_destroy() 関数を使用して、 BSONドキュメントに割り当てられたメモリを解放できます。

bson_t *doc = BCON_NEW("test", BCON_UTF8("example"));
// Operations using doc
bson_destroy(doc);

重要

アプリケーションでのメモリリークを避けるために、終了したら必ず bson_tインスタンスで bson_destroy() を呼び出してください。

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

戻る

集計

項目一覧