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

拡張 JSON

このガイドでは、 MongoDBドキュメントを操作するときに拡張JSONデータ形式を使用する方法を学習できます。

JSON は、オブジェクト、配列、数値、string、ブール値、null の値を表す人間が判読可能なデータ形式です。この形式は、 MongoDB がデータを保存するために使用する形式であるBSONデータ型のサブセットのみをサポートします。拡張JSON形式はより多くのBSONタイプをサポートしており、 BSONの各タイプに直接対応するフィールドタイプ情報を表すために "$" のプレフィックスが付いたキーの予約セットを定義します。

JSON、 BSON、 拡張JSONの詳細については、JSONとBSONリソースおよび拡張JSON MongoDB Server のマニュアル エントリを参照してください。

MongoDB拡張JSON は、 BSONデータを表す string 形式を提供します。各形式はJSON RFCに準拠し、特定のユースケースを満たしています。

次の表は、各 拡張JSON形式について説明したものです。

名前
説明

標準

データ変換時に BSON 型情報が停失しないようにする string 形式。
この形式は、人間の可読性と古い形式との相互運用性を犠牲にして、型の保存を優先します。このモードを指定するには、to_json() メソッドに mode 引数として bsoncxx::ExtendedJsonMode::k_canonical を渡します。

緩和

型情報の一部が失われる BSON ドキュメントを記述する string 形式。
この形式では、特定の型情報を犠牲にして、人間の読みやすさと相互運用性が優先されます。このモードを指定するには、to_json() メソッドに mode 引数として bsoncxx::ExtendedJsonMode::k_relaxed を渡します。

Legacy

型情報の一部が失われる BSON ドキュメントを記述する string 形式。
この形式は、いくつかの例外を除き、Relaxed Extended JSON と一致します。
C++ ドライバーはデフォルトでこのモードを使用します。

注意

C++ドライバーは、$uuid 拡張JSON型を string からバイナリ サブタイプ 4 の b_binaryオブジェクトに解析します。$uuidフィールド解析の詳細については、拡張JSON仕様の$uuid フィールドを解析するための特別なルールセクションを参照してください。

次の例は、それぞれの拡張 JSON 形式で表される ObjectId、date、long 数値フィールドを含むドキュメントを示しています。 表示する例の形式に対応するタブをクリックします。

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "1601499771648" },
"numViews": 36520312
}

bsoncxx::from_json() メソッドを呼び出すと、拡張JSON string をC++ BSONドキュメントに読み込むことができます。このメソッドは、拡張JSON string を解析し、 データを含む bsoncxx::document::value を返します。

次の例は、 from_json() メソッドを使用して、拡張JSON string をBSONドキュメントに読み込む方法を示しています。

bsoncxx::document::value doc = bsoncxx::from_json(R"(
{
"_id": {"$oid": "507f1f77bcf86cd799439011"},
"myNumber": {"$numberLong": "4794261"}
}
)");

警告

JSON をBSONに変換する前に信頼できない入力を検証する

JSON string をBSONに変換し、クエリ、アップデート、またはコマンドで結果のBSONを使用すると、攻撃者は操作の意味を変更する演算子や予期しないフィールド値を挿入することができます。このリスクは、 JSONがユーザー、 APIリクエスト、または別の信頼できないソースからのものである場合に最も高くなります。

変換する前に入力を検証する方法の詳細については、 「 JSON をBSONに変換する前に信頼できない入力を検証する 」を参照してください。

拡張JSON string を書き込むには、bsoncxx::to_json() メソッドを使用します。デフォルトでは 、このメソッドはレガシー形式の拡張JSON string を返しますが、mode 引数を渡すことで、標準の または 形式を指定できます。

注意

レガシー バージョン

レガシー形式オプション は、 BSON types Libbson レガシー拡張JSON形式で直列化するようにC++ドライバーに指示します。ドライバーはこれをデフォルトのモードとして使用します。

詳細については、 CドライバーAPIドキュメントの 「レガシー拡張JSON」 ページを参照してください。

bsoncxx::to_json() メソッドは、array や document など、いくつかのコアおよび標準ライブラリ タイプで使用できます。次の例では、document 値を標準形式の拡張JSON string に変換します。

bsoncxx::builder::basic::document doc_builder;
doc_builder.append(kvp("myNumber", 11223344));
doc_builder.append(kvp("myString", "String value"));
bsoncxx::document::value doc = doc_builder.extract();
std::string json_str =
bsoncxx::to_json(doc, bsoncxx::ExtendedJsonMode::k_canonical);
std::cout << json_str << std::endl;

このガイドで言及されている型とメソッドの詳細については、次のAPIドキュメントを参照してください。

拡張JSONの詳細については、 MongoDB Serverマニュアルの「 MongoDB拡張JSON (v2 ) 」を参照してください。