MongoDB 拡張 JSON(v1)
重要
曖昧さ回避
次のページでは、MongoDB 拡張 JSON v 1 (レガシー拡張 JSON)について説明します。 MongoDB Extended JSON v 2の詳細については、 MongoDB 拡張 JSON(v 2 )を参照してください。
mongo
でサポートされているデータ型については、 mongosh データ型 を参照してください。
JSONは、 BSONでサポートされている型のサブセットのみを表すことができます。 型情報を保持するために、MongoDB は JSON 形式に次の拡張機能を追加します。
厳密モード。 BSON types の厳密なモード表現は JSON RFC に準拠します 。すべての JSON パーサーは、これらの厳密モード表現をキーと値のペアとして解析できます。ただし、形式によって伝達される型情報を認識するのは、MongoDB 内部の JSON パーサーのみです。
mongo
shell モード。 MongoDB 内部 JSON パーサーとmongo
shell はこのモードを解析できます。
さまざまなデータ型に使用される表現は、JSON が解析されるコンテキストによって異なります。
MongoDB Extended JSON v 1と MongoDB ドライバー
次のドライバーは、拡張 JSON v 1.0を使用します (レガシー)
C#
Ruby
その他のドライバーについては、「 MongoDB 拡張 JSON(v 2 ) 」を参照してください。
パーサーとサポートされている形式
厳密モードでの入力
次の例では、型情報を認識して厳密モードで表現を解析できます。
mongoimport
バージョン4.0以前--query
さまざまな MongoDB ツールのオプション
mongo
shell を含む他の JSON パーサーは、厳密なモード表現をキーと値のペアとして解析できますが、型情報は認識されません。
mongo
shell モードでの入力
次の例では、型情報を認識してmongo
shell モードで表現を解析できます。
mongoimport
バージョン4.0以前--query
さまざまな MongoDB ツールのオプションmongo
Shell
厳密モードでの出力
バージョン4.2より前では、 mongoexport
は MongoDB Extended JSON v 1の厳密モードでデータを出力します。
shell モードでの出力mongo
バージョン 4.2 より前では、 bsondump
は mongo
shellモードでの出力を出力します。
BSON データ型と関連表現
BSON以下は、 Strict モード とmongo
shell モード での データ型と関連する表現を示しています。
バイナリ
data_binary
- 厳密モード
mongo
shellモード{ "$binary": "<bindata>", "$type": "<t>" } BinData ( <t>, <bindata> )
ここで、値は次のとおりです。
<bindata>
は、 バイナリ string の基本64表現です。<t>
は、データ型を示す単一のバイトの表現です。 Strict モードでは 16進数stringで、 shellモードでは整数です。 拡張BSONドキュメント を参照してください。 http://bsonspec.org/spec.html
日付
data_date
- 厳密モード
mongo
shellモード{ "$date": "<date>" } new Date ( <date> ) 厳密モードでは、
<date>
は、テンプレートYYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>
に続く必須のタイムゾーン フィールドを持つ ISO- 8601日付形式です。shellモードでは、
<date>
は、エポック UTC からのミリ秒数を提供する 64 ビット符号付き整数のJSON表現です。
タイムスタンプ
data_timestamp
- 厳密モード
mongo
shellモード{ "$timestamp": { "t": <t>, "i": <i> } } Timestamp( <t>, <i> )
ここで、値は次のとおりです。
<t>
は、 UNIXエポックからの秒数 の32ビット符号なし整数の JSON 表現です。<i>
は、増分を表す32ビットの符号なし整数であり、
正規表現
data_regex
- 厳密モード
mongo
shellモード{ "$regex": "<sRegex>", "$options": "<sOptions>" } /<jRegex>/<jOptions>
ここで、値は次のとおりです。
<sRegex>
は、有効な JSON 文字の string です。<jRegex>
は、有効な stringJSONとエスケープされていないdouble 引用符( )文字を含むことができますが、エスケープされていないスラッシュ("
/
)文字を含めることはできません。<sOptions>
は、アルファベットの文字で表される正規表現オプションを含む string です。<jOptions>
は、「g」、「i」、「m」、「s」の文字のみを含む string です(v1.9 で追加)。JavaScript
とmongo Shell
表現は限られた範囲のオプションをサポートするため、この表現に変換するときに一致しないオプションはすべて削除されます。
OID
data_oid
- 厳密モード
mongo
shellモード{ "$oid": "<id>" } ObjectId( "<id>" )
ここで、値は次のとおりです。
<id>
は、 24文字の 16 進 string です。
DB 参照
data_ref
- 厳密モード
mongo
shellモード{ "$ref": "<name>", "$id": "<id>" } DBRef("<name>", "<id>")
ここで、値は次のとおりです。
<name>
は、有効な JSON 文字の string です。<id>
は、任意の有効な拡張 JSON タイプです。
Undefined 型
data_undefined
- 厳密モード
mongo
shellモード{ "$undefined": true } undefined JavaScript/BSON 未定義の型の表現。
クエリ ドキュメントでは
undefined
は使用できません。 レガシーのmongo
shell を使用してpeople
コレクションに挿入された次のドキュメントを検討します。db.people.insertOne( { name : "Sally", age : undefined } ) 次のクエリは、 エラーを返します。
db.people.find( { age : undefined } ) db.people.find( { age : { $gte : undefined } } ) ただし、次のように
$type
を使用して未定義の値をクエリできます。db.people.find( { age : { $type : 6 } } ) このクエリは、
age
フィールドの値がundefined
であるすべてのドキュメントを返します。
MinKey
Max key
NumberLong
data_numberlong
- 厳密モード
mongo
shellモード{ "$numberLong": "<number>" } NumberLong( "<number>" ) NumberLong
は、64 ビットの符号付き整数です。 レガシーのmongo
shell では、NumberLong
を挿入するには引用符を使用する必要があります。そうしないと、操作でエラーが発生します。9223372036854775807
NumberLong
たとえば、次のコマンドは、整数値の前後に引用符を付けずに、 を として挿入しようとします。db.json.insertOne( { longQuoted : NumberLong("9223372036854775807") } ) db.json.insertOne( { longUnQuoted : NumberLong(9223372036854775807) } ) 強調表示された行は、レガシーの
mongo
shell でエラーを生成します。 挿入はmongosh
で成功します。
NumberDecimal
data_numberdecimal
- 厳密モード
mongo
shellモード{ "$numberDecimal": "<number>" } NumberDecimal( "<number>" ) NumberDecimal
は 高精度の 10 進数で 。引用符を含める必要があります。そうしないと、入力数値が double として扱われるため、データが失われます。123.40
NumberDecimal
たとえば、次のコマンドは、値の前後に引用符を付けずに として挿入します。db.json.insertOne( { decimalQuoted : NumberDecimal("123.40") } ) db.json.insertOne( { decimalUnQuoted : NumberDecimal(123.40) } ) ドキュメントを取得すると、
decimalUnQuoted
の値は変更されていますが、decimalQuoted
は指定された精度を保持します。db.json.find() { "_id" : ObjectId("596f88b7b613bb04f80a1ea9"), "decimalQuoted" : NumberDecimal("123.40") } { "_id" : ObjectId("596f88c9b613bb04f80a1eaa"), "decimalUnQuoted" : NumberDecimal("123.400000000000") } 重要
この挿入動作は、
mongosh
では異なります。引用符で囲まれたstring形式
NumberDecimal("123.40")
は非推奨です。 挿入は成功しますが、警告も生成されます。引用符で囲まれていないstring形式の場合、
NumberDecimal(123.40)
では値が123.4
として保存されます。 後続の0
は削除されます。