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

MongoDB 拡張 JSON(v2)

項目一覧

  • MongoDB 拡張 JSON v2 の使用法
  • BSON データ型と関連表現

重要

曖昧さ回避

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

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

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

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

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

次のドライバーは、拡張 JSON v2.0 を使用します

  • C

  • C++

  • Go

  • Java

  • Node

  • Perl

  • PHPC

  • Python

  • Scala

レガシー MongoDB Extended JSON v1 を使用する C# および Ruby については、「MongoDB 拡張 JSON(v1)」を参照してください。

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で作成されたdata fileを復元するには、対応するバージョンのmongorestoreを使用します。

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.

一般に、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 インターネット日付や時刻形式 の日付を文字列として指定します。

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

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

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

Decimal128

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

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

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>

    • 増分を表す正の整数。

次の例は、拡張 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 オブジェクト変換メソッドを使用してオブジェクトをさまざまな形式に変換します。

conversionsコレクションでドキュメントを作成します。

db.conversions.insertOne( { insertDate: new Date() } )

mongosh はドキュメント オブジェクトを返します。

{
acknowledged: true,
insertedId: ObjectId("61fbaf25671c45f3f5f4074a")
}

MongoDB ドキュメント オブジェクトに保存されているデータをシリアル化します。

serialized = EJSON.serialize( db.conversions.findOne() )

mongosh は JavaScript オブジェクトを解析し、"$" プレフィックス付きの 型: を使用して値を返します。

{
_id: { '$oid': '61fbaf25671c45f3f5f4074a' },
insertDate: { '$date': '2022-02-03T10:32:05.230Z' }
}

シリアル化されたオブジェクトを逆シリアル化します。

EJSON.deserialize( serialized )

mongoshは JavaScript オブジェクトを解析し、デフォルトのmongosh形式を使用して値を返します。

{
_id: new ObjectId( "61fbaf25671c45f3f5f4074a" ),
insertDate: ISODate( "2022-02-03T10:32:05.230Z" )
}

オブジェクトを文字列に変換します。

stringified = EJSON.stringify( db.conversions.findOne() )

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

{
"_id": {"$oid":"61fbaf25671c45f3f5f4074a"},
"insertDate":{"$date":"2022-02-03T10:32:05.230Z"}
}

文字列を解析してオブジェクトを作成します。

EJSON.parse( stringified )

mongosh 変換された文字列をドキュメントとして返します。

{
_id: new ObjectId("61fbaf25671c45f3f5f4074a"),
insertDate: ISODate("2022-02-03T10:32:05.230Z")
}

戻る

比較とソートの順序