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) 」を参照してください。

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

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

シリアル化されたドキュメントをフィールドと値のペアに変換します。値には BSON types があります。

EJSON.deserialize( <serialized object> )

stringify

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

EJSON.stringify( <deserialized object> )

parse

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

EJSON.parse( <string> )

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

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

バージョン 4.2 以降

バイナリ
変更点

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

拡張 JSON v 2.0を使用する メタデータの (標準モード)形式。 拡張 JSON v 2.0をサポートするmongorestoreバージョン4.2以降が必要です。 (標準モードまたは緩和)形式。

一般に、mongodumpmongorestore の対応するバージョンを使用します。特定のバージョンのmongodump で作成されたデータファイルを復元するには、対応するバージョンの mongorestore を使用します。

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

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

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

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

一般に、mongoexportmongoimport のバージョンは一致する必要があります。mongoexport から作成されたデータをインポートするには、対応するバージョンの 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 オブジェクト変換メソッドを使用してオブジェクトを様々な形式に変換します。

MongoDB ドキュメント オブジェクトに保存されているデータをシリアル化します。mongosh は JavaScript オブジェクトを解析し、"$" プレフィックス付きの 型:を使用して値を返します。

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'
}
}

シリアル化されたオブジェクトをデシリアル化する。mongosh は JavaScript オブジェクトを解析し、デフォルトの mongosh 形式を使用して値を返します。

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

オブジェクトを文字列に変換します。mongoshは、変換されたオブジェクトの要素を string として出力します。

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"}}

文字列を解析してオブジェクトを作成します。mongoshは、変換された string をドキュメントとして返します。

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