(翻譯) MongoDB(6) MongoDB 繼承 JSON

JSON 所支持的類型僅是 BSON 所支持的一部分(子集). 不只保留了類型信息, MongoDB 還爲 JSON 格式增長了如下擴展:html

  • 嚴格模式. BSON 類型的嚴格模式符合JSON RFC. 任何 JSON 解析器均可以將這些嚴格模式的表示解析爲鍵/值對; 然而, 僅有 MongoDB 內部 JSON 解析器能夠識別由格式所傳達的類型信息.正則表達式

  • mongo Shell 模式. MongoDB 內部 JSON 解析器和 mongo shell 均可以解析這個模式.mongodb

表現用於各類數據類型決定JSON 解析的上下文.shell

解析器和支持的格式

嚴格模式輸入

下面能夠解析在嚴格模式下類型信息的識別.json

其餘JSON解析器,包含 mongo shell 和 db.eval(), 能夠識別嚴格模式表示爲鍵/值對, 可是沒有識別類型信息.code

mongo Shell模式輸入

下面能夠解析在 mongo shell 模式下識別類型信息.htm

嚴格模式輸出

mongoexport and REST 和 HTTP 接口 在嚴格模式下輸出數據.

mongo Shell模式輸出

bsondumpmongo Shell 模式輸出.

BSON 數據類型和有關表現

下面介紹 BSON 數據類型和在嚴格模式和 mongo Shell 模式下有關表現.

二進制

data_binary

Strict Mode mongo Shell Mode
{ "$binary": "<bindata>", "$type": "<t>" } BinData ( <t>, <bindata> )
  • <bindata> 是一個二進制字符串的base64的表現形式.

  • <t> 是單個字節代表數據類型的表現形式. 在嚴格模式下, 它是一個十六進制字符串, 而且在 Shell 模式它是一個整數. 查閱BSON擴展文檔. http://bsonspec.org/spec.html

Date

data_date

嚴格模式 mongo Shell 模式
{ "$date": "<date>" } new Date ( <date> )

在嚴格模式下, <date> 是一種ISO 8601的日期格式, 帶着必需的遵循如下格式的(YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>) 的時區字段.

MongoDB JSON 解析器當前不支持加載 ISO-8601 字符串, 表示Unix紀元以前的日期. 當格式化紀元以前的日期和過去的日期, 你的系統的 time_t 類型能夠存在, 使用如下格式:

{ "$date" : { "$numberLong" : "<dateAsMilliseconds>" } }

在 Shell 模式下, <date> 是JSON表示的一個64位有符號整數,賦予了自紀元UTC以後毫秒數.

Timestamp

data_timestamp

嚴格模式 mongo Shell 模式
{ "$timestamp": { "t": <t>, "i": <i> } } Timestamp( <t>, <i> )
  • <t> 是一個JSON表現的自紀元到如今的32位無符號的總秒數.

  • <i> 是一個一直增加的32位無符號整數.

正則表達式

data_regex

嚴格模式 mongo Shell 模式
{ "$regex": "<sRegex>", "$options": "<sOptions>" } /<jRegex>/<jOptions>
  • <sRegex> 是一個有效的JSON字符串.

  • <jRegex> 是一個字符串, 包含有效的JSON字符和非轉義的雙引號(")字符, 可是可能不包含非轉義反斜槓(/)字符.

  • <sOptions> 是一個字符串包含使用字母表中的字母來表示正則表達式選項.

  • <jOptions> 是一個可能只包含‘g’, ‘i’, ‘m’ and ‘s’等的字符串( 版本1.9新增).

  • <jOptions> 是一個可能只包含‘g’, ‘i’, ‘m’ and ‘s’等的字符串( 版本1.9新增). 由於 JavaScriptmongo Shell 支持一個範圍限制選項, 當轉換爲這種表示方法的時候,任何不合格的選項都將會被丟棄.

OID

data_oid

嚴格模式 mongo Shell 模式
{ "$oid": "<id>" } ObjectId( "<id>" )

<id> 是一個24個字符的16進制字符串.

DB Reference

data_ref

嚴格模式 mongo Shell 模式
{ "$ref": "<name>", "$id": "<id>" } DBRef("<name>", "<id>")
  • <name> 是一個有效的JSON字符串.

  • <id> 是任何有效的擴展JSON類型.

Undefined 類型

data_undefined

嚴格模式 mongo Shell 模式
{ "$undefined": true } undefined

JavaScript/BSON undefined 類型的表現.

你不能在文檔查詢中使用undefined. 想象下面的文檔插入到people集合中:

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

下面的查詢返回一個錯誤:

db.people.find( { age : undefined } )
db.people.find( { age : { $gte : undefined } } )

然而,你可使用$type來查詢未定義的值,好比:

db.people.find( { age : { $type : 6 } } )

這個查詢返回全部age字段的值爲undefined的文檔.

MinKey

data_minkey

嚴格模式 mongo Shell 模式
{ "$minKey": 1 } MinKey

BSON數據類型 MinKey 的表現是相比之下,小於其它全部類型. 在BSON類型比較排序上查閱比較/排序 順序的更多信息..

MaxKey

data_maxkey

嚴格模式 mongo Shell 模式
{ "$maxKey": 1 } MaxKey

BSON數據類型 MaxKey 的表現是相比之下,大於其它全部類型. 在BSON類型比較排序上查閱比較/排序 順序的更多信息.

NumberLong

版本2.6新功能

data_numberlong

嚴格模式 mongo Shell 模式
{ "$numberLong": "<number>" } NumberLong( "<number>" )

NumberLong是一個64位有符號整數。你必須包含括號,不然將會被解釋爲浮點數,致使準確性的損失。

例如,下列命令是把帶括號和不帶括號的整數值9223372036854775807做爲一個NumberLong來插入:

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

當你檢索文檔的時候,未加引號的值已經發生了改變,加引號保證了其的準確性:

db.json.find()
{ "_id" : ObjectId("54ee1f2d33335326d70987df"), "longQuoted" : NumberLong("9223372036854775807") }
{ "_id" : ObjectId("54ee1f7433335326d70987e0"), "longUnquoted" : NumberLong("-9223372036854775808") }

下一章:https://segmentfault.com/a/11...
原文來源:https://docs.mongodb.com/manu...

相關文章
相關標籤/搜索