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

MongoDB 拡張 JSON(v2)

重要

曖昧さ回避

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

For supported data types in mongosh, see mongosh Data Types.

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

  • 標準モード
    可読性と相互運用性を犠牲にして、型の保存を重視した文字列形式。つまり、標準から BSON への変換では、特定のケースを除いて、通常は型情報が保持されます。
  • 緩和モード
    型の保存を犠牲にして、読みやすさと相互運用性を重視した文字列形式。つまり、緩和された形式から BSON への変換では、型情報が失われる可能性があります。

どちらの形式もJSON RFCに準拠しています。また、さまざまなMongoDBドライバーとツールによって解析可能です。

次のドライバーは、拡張JSON v2.0 をサポートしています。

  • C

  • C#

  • C++

  • Go

  • Java

  • Kotlin

  • Node

  • Perl

  • PHPC

  • Python

  • Ruby

  • Scala

MongoDB は、拡張 JSON に対して次のメソッドを提供します。

方式
説明

serialize

BSON オブジェクトをシリアル化し、拡張 JSON 形式でデータを返します。

EJSON.serialize( db.<collection>.findOne() )

deserialize

Converts a serialized document to field and value pairs. The values have BSON types.

EJSON.deserialize( <serialized object> )

stringify

逆シリアル化されたオブジェクト内の要素と type のペアを文字列に変換します。

EJSON.stringify( <deserialized object> )

parse

文字列を要素と type のペアに変換します。

EJSON.parse( <string> )

例については、以下の「拡張 JSON オブジェクト変換」を参照してください。

詳しくは、次のドキュメントを参照してください。

バージョン 4.2 以降

バイナリ
変更点

拡張 JSON v2.0(標準モード)形式を使用します。

Use Extended JSON v2.0 (Canonical mode) format for the metadata. Requires mongorestore version 4.2 or later that supports Extended JSON v2.0 (Canonical mode or Relaxed) format.

In general, use corresponding versions of mongodump and mongorestore. To restore data files created with a specific version of mongodump, use the corresponding version of mongorestore.

デフォルトでは、拡張 JSON v2.0(緩和モード)で出力データを作成します。

--jsonFormat とともに使用すると、拡張 JSON v2.0(標準モード)で出力データを作成します。

インポート データは、デフォルトで拡張 JSON v2.0(緩和モードまたは標準モード)であることが想定されています。

--legacy オプションを指定すると、拡張 JSON v1.0 形式のデータを認識できます。

In general, the versions of mongoexport and mongoimport should match. To import data created from mongoexport, you should use the corresponding version of mongoimport.

以下は、一般的な BSON データ型と、それに関連する Canonical および Relaxed での表現です。

完全なリストは ここにあります。

Array

標準
緩和
[ <elements> ]
<Same as Canonical>

ここで、配列要素は次のとおりです。

  • <elements>

    • 配列要素は拡張 JSON を使用します。

    • 空の配列を指定するには、コンテンツ [ ] を省略します。

Binary

標準
緩和
{ "$binary":
{
"base64": "<payload>",
"subType": "<t>"
}
}
<Same as Canonical>

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

  • "<payload>"

    • Base64 エンコード(パディングは " = ")のペイロード文字列。
  • "<t>"

    • BSON バイナリ サブタイプに対応する 1 文字または 2 文字の 16 進文字列。使用可能なサブタイプについては、拡張 bson ドキュメント(http://bsonspec.org/spec.html)を参照してください。
Date

1970 年から 9999 年までの日付(以下を含みます):

標準
緩和
{"$date": {"$numberLong": "<millis>"}}
{"$date": "<ISO-8601 Date/Time Format>"}

1970 年以前または 9999 年以降の日付の場合:

標準
緩和
{"$date": {"$numberLong": "<millis>"}}
<Same as Canonical>

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

  • "<millis>"

    • 文字列としての 64 ビット符号付き整数。この値は、エポックに対するミリ秒単位を表します。
  • "<ISO-8601 Date/Time Format>"

    • ISO-8601 インターネット日付や時刻形式 の日付を string として指定します。

    • 日付や時刻の最大時間精度はミリ秒です。

      • 小数部がゼロ以外の場合、小数秒の小数点は正確に 3 桁になります。

      • それ以外の場合、小数秒がゼロの場合は省略してください。

Decimal128

標準
緩和
{ "$numberDecimal": "<number>" }
<Same as Canonical>

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

  • "<number>"

    • stringとしての高精度の10進数。
Document

標準
緩和
{ <content> }
<Same as Canonical>

ドキュメントのコンテンツは次のとおりです。

  • <content>

    • 名称: 拡張 JSON を使用する値のペア。

    • 空のドキュメントを指定するには、コンテンツ { } を省略します。

Double

有限数の場合:

標準
緩和
{"$numberDouble": "<decimal string>" }
<non-integer number>

無限数または NAN の場合:

標準
緩和
{"$numberDouble": <"Infinity"|"-Infinity"|"NaN"> }
<Same as Canonical>

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

  • "<decimal string>"

    • 64 ビットの符号付き浮動小数点を文字列として表します。
  • <non-integer number>

    • 非整数。整数は double ではなく integer として解析されます。
Int64

標準
緩和
{ "$numberLong": "<number>" }
<integer>

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

  • "<number>"

    • 文字列としての 64 ビット符号付き整数。
  • <integer>

    • 64 ビットの符号付き整数。
Int32

標準
緩和
{ "$numberInt": "<number>" }
<integer>

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

  • "<number>"

    • 文字列としての 32 ビット符号付き整数。
  • <integer>

    • 32 ビットの符号付き整数。
MaxKey

標準
緩和
{ "$maxKey": 1 }
<Same as Canonical>

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

MinKey

標準
緩和
{ "$minKey": 1 }
<Same as Canonical>

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

ObjectId

標準
緩和
{ "$oid": "<ObjectId bytes>" }
<Same as Canonical>

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

  • "<ObjectId bytes>"

    • ObjectId バイトを表す 24 文字のビッグ エンディアンの文字列。
Regular Expression

標準
緩和
{ "$regularExpression":
{
"pattern": "<regexPattern>",
"options": "<options>"
}
}
<Same as Canonical>

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

  • "<regexPattern>"

    • 正規式パターンに対応する string。string には有効な JSON 文字とエスケープされていない二重引用符(" )文字を含めることができますが、エスケープされていないスラッシュ(/)文字を含めることはできません。
  • "<options>"

    • BSON 正規表現オプションを指定する string。 オプションはアルファベット順に指定する必要があります。 サポートされているオプションの詳細については、 $optionsを参照してください。
Timestamp

標準
緩和
{"$timestamp": {"t": <t>, "i": <i>}}
<Same as Canonical>

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

  • <t>

    • エポックからの秒数の正の整数。
  • <i>

    • 増分を表す正の整数。

このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。

次の例は、拡張 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}}

"uuid":

{"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"}

{"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"}

次の短い例では、ドキュメントオブジェクトを取得し、拡張 JSON オブジェクト変換メソッドを使用してオブジェクトを様々な形式に変換します。

Serialize the data stored in a MongoDB document object. mongosh parses a JavaScript object and returns values using "$" prefixed types:

serialized = EJSON.serialize(
db.comments.find( {}, { _id: 1, date: 1 } ).sort( { _id: 1 } ).limit(1).next()
)
{
_id: {
'$oid': '5a9427648b0beebeb69579e7'
},
date: {
'$date': '2002-08-18T04:56:07.000Z'
}
}

Deserialize a serialized object. mongosh parses a JavaScript object and returns values using the default mongosh type form:

EJSON.deserialize( serialized )
{
_id: ObjectId('5a9427648b0beebeb69579e7'),
date: ISODate('2002-08-18T04:56:07.000Z')
}

Convert an object to a string. mongosh outputs the elements of the converted object as strings:

stringified = EJSON.stringify(
db.comments.find( {}, { _id: 1, date: 1 } ).sort( { _id: 1 } ).limit(1).next()
)
{"_id":{"$oid":"5a9427648b0beebeb69579e7"},"date":{"$date":"2002-08-18T04:56:07.000Z"}}

Parse a string to create an object. mongosh returns the converted strings as documents:

EJSON.parse( stringified )
{
_id: ObjectId('5a9427648b0beebeb69579e7'),
date: ISODate('2002-08-18T04:56:07.000Z')
}