MongoDB 拡張 JSON(v2)
重要
曖昧さ回避
次のページでは、 MongoDB 拡張 JSON v 2について説明します。 レガシー MongoDB 拡張 JSON v 1の詳細については、 MongoDB 拡張 JSON(v 1 )を参照してください。
mongosh
でサポートされているデータ型については、「mongosh データ型」を参照してください。
JSON は、BSON でサポートされている型のサブセットのみを直接表すことができます。型情報を保持するために、MongoDB は JSON 形式に次の拡張機能を追加します。
- 標準モード
- 文字列と相互運用性を犠牲にして、型の保存を重視した文字列形式。つまり、標準から BSON への変換では、特定のケースを除いて、通常は型情報が保持されます。
- 緩和モード
- 型の保存を犠牲にして、読みやすさと相互運用性を重視した文字列形式。つまり、緩和された形式から BSON への変換では、型情報が失われる可能性があります。
どちらの形式も JSON RFC に準拠しています。また、さまざまな MongoDB ドライバーとツールによって解析可能です。
MongoDB 拡張 JSON v2 の使用法
ドライバー
次のドライバーは、拡張 JSON v2.0 を使用します
|
|
|
レガシー MongoDB Extended JSON v1 を使用する C# および Ruby については、「MongoDB 拡張 JSON(v1)」を参照してください。
拡張 JSON メソッド
MongoDB は、拡張 JSON に対して次のメソッドを提供します。
方式 | 説明 | |
serialize | BSON オブジェクトをシリアル化し、拡張 JSON 形式でデータを返します。
| |
deserialize | シリアル化されたドキュメントをフィールドと値のペアに変換します。値には BSON types があります。
| |
stringify | 逆シリアル化されたオブジェクト内の要素と type のペアを文字列に変換します。
| |
parse | 文字列を要素と type のペアに変換します。
|
例については、以下の「拡張 JSON オブジェクト変換」を参照してください。
詳しくは、次のドキュメントを参照してください。
MongoDB データベース ツール
バージョン 4.2 以降
バイナリ | 変更点 |
---|---|
拡張 JSON v2.0(標準モード)形式を使用します。 | |
拡張 JSON v 2.0を使用する メタデータの (標準モード)形式。 拡張 JSON v 2.0をサポートする 一般に、対応するバージョンの | |
Creates output data in Extended JSON v2.0 (Relaxed mode) by
default. Creates output data in Extended JSON v2.0 (Canonical mode) if
used with --jsonFormat . | |
Expects import data to be in Extended JSON v2.0 (either
Relaxed or Canonical mode) by default. Can recognize data that is in Extended JSON v1.0 format if the option
--legacy is specified.一般に、 |
BSON データ型と関連表現
以下は、一般的な BSON データ型と、それに関連する Canonical および Relaxed での表現です。
完全なリストは ここにあります。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、配列要素は次のとおりです。
<elements>
配列要素は拡張 JSON を使用します。
空の配列を指定するには、コンテンツ
[ ]
を省略します。
標準 | 緩和 | |||||||
---|---|---|---|---|---|---|---|---|
|
|
ここで、値は次のとおりです。
"<payload>"
Base64 エンコード(パディングは " = ")のペイロード文字列。
"<t>"
BSON バイナリ サブタイプに対応する 1 文字または 2 文字の 16 進文字列。使用可能なサブタイプについては、拡張 bson ドキュメント(http://bsonspec.org/spec.html)を参照してください。
1970 年から 9999 年までの日付(以下を含みます):
標準 | 緩和 | ||
---|---|---|---|
|
|
1970 年以前または 9999 年以降の日付の場合:
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<millis>"
文字列としての 64 ビット符号付き整数。この値は、エポックに対するミリ秒単位を表します。
"<ISO-8601 Date/Time Format>"
ISO-8601 インターネット日付や時刻形式 の日付を文字列として指定します。
日付や時刻の最大時間精度はミリ秒です。
小数部がゼロ以外の場合、小数秒の小数点は正確に 3 桁になります。
それ以外の場合、小数秒がゼロの場合は省略してください。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<number>"
高精度の 10 進数 string として表示される。
標準 | 緩和 | ||
---|---|---|---|
|
|
ドキュメントのコンテンツは次のとおりです。
<content>
名称: 拡張 JSON を使用する値のペア。
空のドキュメントを指定するには、コンテンツ
{ }
を省略します。
有限数の場合:
標準 | 緩和 | ||
---|---|---|---|
|
|
無限数または NAN の場合:
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<decimal string>"
64 ビットの符号付き浮動小数点を文字列として表します。
<non-integer number>
非整数。整数は double ではなく integer として解析されます。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<number>"
文字列としての 64 ビット符号付き整数。
<integer>
64 ビットの符号付き整数。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<number>"
文字列としての 32 ビット符号付き整数。
<integer>
32 ビットの符号付き整数。
標準 | 緩和 | ||
---|---|---|---|
|
|
MaxKey BSON データ型は、他のすべての型よりも高位にあります。BSON types の比較順序について詳しくは、「比較/並べ替え順序」を参照してください。
標準 | 緩和 | ||
---|---|---|---|
|
|
MaxKey BSON データ型は、他のすべての型よりも低位にあります。BSON types の比較順序について詳しくは、「比較/並べ替え順序」を参照してください。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
"<ObjectId bytes>"
ObjectId バイトを表す 24 文字のビッグ エンディアンの文字列。
標準 | 緩和 | |||||||
---|---|---|---|---|---|---|---|---|
|
|
ここで、値は次のとおりです。
"<regexPattern>"
正規式パターンに対応する string。string には有効な JSON 文字とエスケープされていない二重引用符(
"
)文字を含めることができますが、エスケープされていないスラッシュ(/
)文字を含めることはできません。
"<options>"
BSON 正規表現オプションを指定する string。 オプションはアルファベット順に指定する必要があります。 サポートされているオプションの詳細については、
$options
を参照してください。
標準 | 緩和 | ||
---|---|---|---|
|
|
ここで、値は次のとおりです。
<t>
エポックからの秒数の正の整数。
<i>
増分を表す正の整数。
例
次の例は、拡張 JSON の使用方法を示しています。
型表現
フィールド名の例 | 標準形式 | 緩和形式 |
---|---|---|
" _id: " | {"$oid":"5d505646cf6d4fe581014ab2"} | {"$oid":"5d505646cf6d4fe581014ab2"} |
"arrayField": | ["hello",{"$numberInt":"10"}] | ["hello",10] |
"dateField": | {"$date":{"$numberLong":"1565546054692"}} | {"$date":"2019-08-11T17:54:14.692Z"} |
"dateBefore1970": | {"$date":{"$numberLong":"-1577923200000"}} | {"$date":{"$numberLong":"-1577923200000"}} |
"decimal128Field": | {"$numberDecimal":"10.99"} | {"$numberDecimal":"10.99"} |
"documentField": | {"a":"hello"} | {"a":"hello"} |
"doubleField": | {"$numberDouble":"10.5"} | 10.5 |
"infiniteNumber" | {"$numberDouble":"Infinity"} | {"$numberDouble":"Infinity"} |
"int32field": | {"$numberInt":"10"} | 10 |
"int64Field": | {"$numberLong":"50"} | 50 |
"minKeyField": | {"$minKey":1} | {"$minKey":1} |
"maxKeyField": | {"$maxKey":1} | {"$maxKey":1} |
"regexField": | {"$regularExpression":{"pattern":"^H","options":"i"}} | {"$regularExpression":{"pattern":"^H","options":"i"}} |
"timestampField": | {"$timestamp":{"t":1565545664,"i":1}} | {"$timestamp":{"t":1565545664,"i":1}} |
拡張 JSON オブジェクト変換
次の短い例では、ドキュメント オブジェクトを作成し、拡張 JSON オブジェクト変換メソッドを使用してオブジェクトをさまざまな形式に変換します。
セットアップ
conversions
コレクションでドキュメントを作成します。
db.conversions.insertOne( { insertDate: new Date() } )
mongosh
はドキュメント オブジェクトを返します。
{ acknowledged: true, insertedId: ObjectId("61fbaf25671c45f3f5f4074a") }
EJSON.serialize
MongoDB ドキュメント オブジェクトに保存されているデータをシリアル化します。
serialized = EJSON.serialize( db.conversions.findOne() )
mongosh
は JavaScript オブジェクトを解析し、"$"
プレフィックス付きの 型: を使用して値を返します。
{ _id: { '$oid': '61fbaf25671c45f3f5f4074a' }, insertDate: { '$date': '2022-02-03T10:32:05.230Z' } }
EJSON.deserialize
シリアル化されたオブジェクトを逆シリアル化します。
EJSON.deserialize( serialized )
mongosh
は JavaScript オブジェクトを解析し、デフォルトのmongosh
型形式を使用して値を返します。
{ _id: new ObjectId( "61fbaf25671c45f3f5f4074a" ), insertDate: ISODate( "2022-02-03T10:32:05.230Z" ) }
EJSON.stringify
オブジェクトを文字列に変換します。
stringified = EJSON.stringify( db.conversions.findOne() )
mongosh
変換されたオブジェクトの要素を文字列として出力します。
{ "_id": {"$oid":"61fbaf25671c45f3f5f4074a"}, "insertDate":{"$date":"2022-02-03T10:32:05.230Z"} }
EJSON.parse
文字列を解析してオブジェクトを作成します。
EJSON.parse( stringified )
mongosh
変換された文字列をドキュメントとして返します。
{ _id: new ObjectId("61fbaf25671c45f3f5f4074a"), insertDate: ISODate("2022-02-03T10:32:05.230Z") }