Docs 菜单
Docs 主页
/ /
Atlas App Services
/

Data Formats

在此页面上

  • 标准 JSON (application/json)
  • 规范和宽松 EJSON (application/ejson)
  • BSON类型
  • 阵列
  • 二进制文件
  • Date
  • Decimal128
  • 文档
  • double
  • Int32
  • Int64
  • Max key
  • 最小键值
  • ObjectId
  • 正则表达式
  • 时间戳

MongoDB以名为 BSON 的格式存储数据 ,其结构类似于JSON对象,但支持其他数据类型并使用二进制编码。BSON对于计算机来说非常高效,但不可读,因此您无法直接使用它。

相反,Data API 使用两种格式来表示请求和响应中的数据:JSON 和 EJSON。

您可以为所有生成的 数据API 端点并为每个自定义端点单独定义一个默认返回类型。 传入请求还可以使用 Accept标头指定覆盖默认值的首选数据格式。

例子

本文档可以用 JSON 或 EJSON 表示,显示以 JSON 和 EJSON 表示的 BSON 类型:

{
"Name": "Mango",
"Year": { "$numberLong": "2022" },
"Weight": { "$numberDecimal": "9823.1297" },
"Date": { "$date": { "$numberLong": "1641954803067" } }
}
{
"Name": "Mango",
"Year": 2022,
"Weight": "9823.1297",
"Date": "2022-01-12T02:33:23.067Z"
}

您可以为所有生成的 数据API 端点并为每个自定义端点单独定义一个默认返回类型。 传入请求还可以指定首选数据格式,以覆盖使用Accept标头的默认值。

JSON格式使用任何工具都可以解析和理解的标准类型。 但是,JSON 无法表示所有 BSON types,因此 JSON 响应可能会丢失某些字段的类型信息。例如,BSON 对于 32 位整数和 64 位浮点数有不同的类型,但 JSON 响应将两者表示为number

EJSON格式是MongoDB Extended JSON的缩写,是标准JSON的超集,它使用结构化字段来表示没有相应JSON类型的BSON数据。 这完全代表了您的数据,但要求您的客户端了解如何使用EJSON。

EJSON 有两种变体:

  • Canonical EJSON使用冗长的结构,强调类型保留,但牺牲了可读性和互操作性。 它完全代表 BSON types,但您可能需要使用库或自定义代码才能使用它。

  • 宽松 EJSON使用更紧凑的结构,更易于阅读和使用,但可能会丢失某些 BSON types 的类型信息。例如,插入文档中的数字字段可能会被推断为与预期不同的数字 BSON 类型。

您可以在请求正文中使用规范或宽松 EJSON。配置为返回 EJSON 的 Data API 端点始终返回规范 EJSON。

本部分列出了 Data API 支持的 BSON 类型,并显示每种类型如何以 JSON 和 EJSON 格式表示。

EJSON
JSON

Canonical EJSON

[ <elements> ]

宽松 EJSON

与 Canonical 相同

[ <elements> ]
EJSON
JSON

Canonical EJSON

{
"$binary": {
"base64": "e67803a39588be8a95731a21e27d7391",
"subType": "05"
}
}

宽松 EJSON

与 Canonical 相同

{
"Subtype": 5,
"Data": "e67803a39588be8a95731a21e27d7391"
}
EJSON
JSON

Canonical EJSON

{
"$date": {
"$numberLong": "1641954803067"
}
}

宽松 EJSON

{
"$date": "2022-01-12T02:33:23.067Z"
}
"2022-01-12T02:33:23.067Z"
EJSON
JSON

Canonical EJSON

{ "$numberDecimal": "9823.1297" }

宽松 EJSON

与 Canonical 相同

"9823.1297"
EJSON
JSON

Canonical EJSON

{ <content> }

宽松 EJSON

与 Canonical 相同

{ <content> }
EJSON
JSON

Canonical EJSON

{ "$numberDouble": "10.5" }

宽松 EJSON

10.5
10.5
EJSON
JSON

Canonical EJSON

{ "$numberInt": "10" }

宽松 EJSON

10
10
EJSON
JSON

Canonical EJSON

{ "$numberLong": "50" }

宽松 EJSON

与 Canonical 相同

50
EJSON
JSON

Canonical EJSON

{ "$maxKey": 1 }

宽松 EJSON

与 Canonical 相同

{}

没有等效的 JSON

EJSON
JSON

Canonical EJSON

{ "$minKey": 1 }

宽松 EJSON

与 Canonical 相同

{}

没有等效的 JSON

EJSON
JSON

Canonical EJSON

{ "$oid":"5d505646cf6d4fe581014ab2" }

宽松 EJSON

与 Canonical 相同

"5d505646cf6d4fe581014ab2"
EJSON
JSON

Canonical EJSON

{
"$regularExpression": {
"pattern":"^H",
"options":"i"
}
}

宽松 EJSON

与 Canonical 相同

{
"Pattern": "^H",
"Options": "i"
}
EJSON
JSON

Canonical EJSON

{
"$timestamp": {
"t":1565545664,
"i":1
}
}

宽松 EJSON

与 Canonical 相同

{
"T": 1565545664,
"I": 1
}

后退

对 Data API 请求进行身份验证