Data Formats
在此页面上
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 (application/json)
JSON格式使用任何工具都可以解析和理解的标准类型。 但是,JSON 无法表示所有 BSON types,因此 JSON 响应可能会丢失某些字段的类型信息。例如,BSON 对于 32 位整数和 64 位浮点数有不同的类型,但 JSON 响应将两者表示为number
。
规范和宽松 EJSON (application/ejson)
EJSON格式是MongoDB Extended JSON的缩写,是标准JSON的超集,它使用结构化字段来表示没有相应JSON类型的BSON数据。 这完全代表了您的数据,但要求您的客户端了解如何使用EJSON。
EJSON 有两种变体:
Canonical EJSON使用冗长的结构,强调类型保留,但牺牲了可读性和互操作性。 它完全代表 BSON types,但您可能需要使用库或自定义代码才能使用它。
宽松 EJSON使用更紧凑的结构,更易于阅读和使用,但可能会丢失某些 BSON types 的类型信息。例如,插入文档中的数字字段可能会被推断为与预期不同的数字 BSON 类型。
您可以在请求正文中使用规范或宽松 EJSON。配置为返回 EJSON 的 Data API 端点始终返回规范 EJSON。
BSON类型
本部分列出了 Data API 支持的 BSON 类型,并显示每种类型如何以 JSON 和 EJSON 格式表示。
阵列
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
二进制文件
EJSON | JSON | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
Date
EJSON | JSON | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Canonical EJSON
宽松 EJSON
|
|
Decimal128
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
文档
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
double
EJSON | JSON | |||
---|---|---|---|---|
Canonical EJSON
宽松 EJSON
|
|
Int32
EJSON | JSON | |||
---|---|---|---|---|
Canonical EJSON
宽松 EJSON
|
|
Int64
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
Max key
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
没有等效的 JSON |
最小键值
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
没有等效的 JSON |
ObjectId
EJSON | JSON | ||
---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
正则表达式
EJSON | JSON | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|
时间戳
EJSON | JSON | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Canonical EJSON
宽松 EJSON 与 Canonical 相同 |
|