MongoDB Extended JSONMongoDB扩展的JSON (v2)
JSON can only directly represent a subset of the types supported by BSON.JSON只能直接表示BSON支持的类型的子集。To preserve type information, MongoDB adds the following extensions to the JSON format.为了保留类型信息,MongoDB向JSON格式添加了以下扩展。
- Canonical Mode
A string format that emphasizes type preservation at the expense of readability and interoperability.以牺牲可读性和互操作性为代价强调类型保留的字符串格式。That is, conversion from canonical to BSON will generally preserve type information except in certain specific cases.也就是说,从规范到BSON的转换通常会保留类型信息,除非在某些特定情况下。
- Relaxed Mode
A string format that emphasizes readability and interoperability at the expense of type preservation.一种字符串格式,强调可读性和互操作性,而牺牲类型保留。That is, conversion from relaxed format to BSON can lose type information.也就是说,从宽松格式到BSON的转换可能会丢失类型信息。
Both formats conform to the JSON RFC and can be parsed by the various MongoDB drivers and tools.这两种格式都符合JSON RFC,可以由各种MongoDB驱动程序和工具进行解析。
MongoDB Extended JSON v2 UsageMongoDB扩展的JSON v2用法
BSON Data Types and Associated Representations
The following presents some common BSON data types and the associated representations in Canonical and Relaxed.
For a complete list, see https://github.com/mongodb/specifications/blob/master/source/extended-json.rst#conversion-table.
-
Array
Where the array elements are as follows: |
<elements>
- Array elements use Extended JSON. To specify an empty array, omit the content
[ ] . |
-
Binary
Where the values are as follows: |
"<payload>"
- Base64 encoded (with padding as “=”) payload string.
"<t>"
- A one- or two-character hex string that corresponds to a BSON binary subtype. See the extended bson documentation http://bsonspec.org/spec.html for subtypes available.
|
-
Date
For dates between years 1970 and 9999, inclusive:
For dates before year 1970 or after year 9999:
Where the values are as follows: |
"<millis>"
- A 64-bit signed integer as string. The value represents milliseconds relative to the epoch.
"<ISO-8601 Date/Time Format>"
- A date in ISO-8601 Internet Date/Time Format as string. The date/time has a maximum time precision of milliseconds:
- Fractional seconds have exactly 3 decimal places if the fractional part is non-zero.
- Otherwise, fractional seconds SHOULD be omitted if zero.
|
-
Decimal128
New in version 3.4.版本3.4中的新功能。
Where the values are as follows: |
|
-
Document
Where the document contents are as follows: |
<content>
- Name:value pairs that use Extended JSON. To specify an empty document, omit the content
{ } . |
-
Double
For finite numbers:
For infinite numbers or NAN:
Where the values are as follows: |
"<decimal string>"
- A 64-bit signed floating point as a string.
<non-integer number>
- A non-integer number. Integer numbers are parsed as integer instead of double.
|
-
Int64
Where the values are as follows: |
"<number>"
- A 64-bit signed integer as string.
<integer>
- A 64-bit signed integer.
|
-
Int32
Where the values are as follows: |
"<number>"
- A 32-bit signed integer as string.
<integer>
- A 32-bit signed integer.
|
-
MaxKey
The MaxKey BSON data type compares higher than all other types. See Comparison/Sort Order for more information on comparison order for BSON types.
-
MinKey
The MinKey BSON data type compares lower than all other types. See Comparison/Sort Order for more information on comparison order for BSON types.
-
ObjectId
Where the values are as follows: |
"<ObjectId bytes>"
- A 24-character, big-endian hexadecimal string that represents the ObjectId bytes.
|
-
Regular Expression
Where the values are as follows: |
"<regexPattern>"
A string that corresponds to the regular expression pattern. The string can contain valid JSON characters and unescaped double quote (" ) characters, but may not contain unescaped forward slash (/ ) characters.
"<options>"
A string that specifies BSON regular expression options (‘g’, ‘i’, ‘m’ and ‘s’) or an empty string "" .
Options other than (‘g’, ‘i’, ‘m’ and ‘s’) will be dropped when converting to this representation.
Important
The options MUST be in alphabetical order. |
-
Timestamp
Where the values are as follows: |
<t>
- A positive integer for the seconds since epoch.
<i>
- A positive integer for the increment.
|
Example示例
Example Field Name | Canonical Format | Relaxed Format |
“_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}} |