Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

MongoDB 拡張 JSON(v1)

項目一覧

  • MongoDB Extended JSON v 1と MongoDB ドライバー
  • パーサーとサポートされている形式
  • BSON データ型と関連表現

重要

曖昧さ回避

次のページでは、MongoDB 拡張 JSON v 1 (レガシー拡張 JSON)について説明します。 MongoDB Extended JSON v 2の詳細については、 MongoDB 拡張 JSON(v 2 )を参照してください。

mongoでサポートされているデータ型については、 mongosh データ型 を参照してください。

JSONは、 BSONでサポートされている型のサブセットのみを表すことができます。 型情報を保持するために、MongoDB は JSON 形式に次の拡張機能を追加します。

さまざまなデータ型に使用される表現は、JSON が解析されるコンテキストによって異なります。

次のドライバーは、拡張 JSON v 1.0を使用します (レガシー)

  • C#

  • Ruby

その他のドライバーについては、「 MongoDB 拡張 JSON(v 2 ) 」を参照してください。

次の例では、型情報認識して厳密モードで表現を解析できます。

mongo shell を含む他の JSON パーサーは、厳密なモード表現をキーと値のペアとして解析できますが、型情報は認識されません

次の例では、型情報認識してmongo shell モードで表現を解析できます。

  • mongoimport バージョン4.0以前

  • --query さまざまな MongoDB ツールのオプション

  • mongo Shell

バージョン4.2より前では、 mongoexportは MongoDB Extended JSON v 1の厳密モードでデータを出力します。

バージョン 4.2 より前では、 bsondumpmongo shellモードでの出力を出力します。

BSON以下は、 Strict モードmongoshell モード での データ型と関連する表現を示しています。

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 で追加)。 JavaScriptmongo Shell表現は限られた範囲のオプションをサポートするため、この表現に変換するときに一致しないオプションはすべて削除されます。

data_oid
厳密モード
mongo shellモード
{ "$oid": "<id>" }
ObjectId( "<id>" )

ここで、値は次のとおりです。

  • <id> は、 24文字の 16 進 string です。

data_ref
厳密モード
mongo shellモード
{ "$ref": "<name>", "$id": "<id>" }
DBRef("<name>", "<id>")

ここで、値は次のとおりです。

  • <name> は、有効な JSON 文字の string です。

  • <id> は、任意の有効な拡張 JSON タイプです。

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であるすべてのドキュメントを返します。

重要

未定義の BSON 型は 非推奨mongoshは代わりに null 値を保存します。

たとえば、同じコードを使用して、 mongoshとレガシーmongo shell にドキュメントを挿入します。

db.people.insertOne( { name : "Sally", age : undefined } )

結果として得られるドキュメントは異なります。

{ "name" : "Sally", "age" : null }
{ "name" : "Sally", "age" : undefined }
data_minkey
厳密モード
mongo shellモード
{ "$minKey": 1 }
MinKey

他のすべての型よりも低位にある MaxKey BSON データ型の表現。 BSON types の比較順序について詳しくは、「比較/並べ替え順序」を参照してください。

data_maxkey
厳密モード
mongo shellモード
{ "$maxKey": 1 }
MaxKey

他のすべての型よりも高位にある MaxKey BSON データ型 の表現。 BSON types の比較順序について詳しくは、「比較/並べ替え順序」を参照してください。

data_numberlong
厳密モード
mongo shellモード
{ "$numberLong": "<number>" }
NumberLong( "<number>" )

NumberLong は、64 ビットの符号付き整数です。 レガシーのmongo shell では、 NumberLongを挿入するには引用符を使用する必要があります。そうしないと、操作でエラーが発生します。

9223372036854775807NumberLongたとえば、次のコマンドは、整数値の前後に引用符を付けずに、 を として挿入しようとします。

db.json.insertOne( { longQuoted : NumberLong("9223372036854775807") } )
db.json.insertOne( { longUnQuoted : NumberLong(9223372036854775807) } )

強調表示された行は、レガシーのmongo shell でエラーを生成します。 挿入はmongoshで成功します。

data_numberdecimal
厳密モード
mongo shellモード
{ "$numberDecimal": "<number>" }
NumberDecimal( "<number>" )

NumberDecimal 高精度の 10 進数で 。引用符を含める必要があります。そうしないと、入力数値が double として扱われるため、データが失われます。

123.40NumberDecimalたとえば、次のコマンドは、値の前後に引用符を付けずに として挿入します。

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は削除されます。

戻る

拡張 JSON(v 2 )