MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
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_* 関数の完全なリストについては、libbson APIドキュメントの 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 ドキュメントを参照してください。

戻る

集計

項目一覧