MongoDB almacena datos en un formato llamado BSON, que es similar a un objeto JSON en estructura, pero admite tipos de datos adicionales y utiliza codificación binaria. BSON es eficiente para computadoras, pero no es legible para humanos, por lo que no se puede trabajar con él directamente.
En cambio, la API de datos utiliza dos formatos para representar datos en solicitudes y respuestas: JSON y EJSON.
Se define un único tipo de retorno predeterminado para todos los puntos finales de la API de datos generados e individualmente para cada punto final personalizado. Las solicitudes entrantes también pueden especificar un formato de datos preferido que anule el predeterminado mediante un Accept encabezamiento.
Ejemplo
Este documento se puede representar en JSON o EJSON y muestra los tipos BSON representados en JSON y EJSON:
{ "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" }
Define un único tipo de retorno predeterminado para todos los puntos finales de la API de datos generados e individualmente para cada punto final personalizado. Las solicitudes entrantes también pueden especificar un formato de datos preferido que anule el predeterminado mediante un encabezado Accept.
JSON estándar (application/json)
El formato JSON utiliza tipos estándar que cualquier herramienta puede analizar y comprender. Sin embargo, JSON no puede representar todos los tipos BSON, por lo que las respuestas JSON pueden perder información de tipo en algunos campos. Por ejemplo, BSON tiene tipos distintos para 32enteros de bits y 64flotantes de bits, pero una respuesta JSON representa ambos number como.
EJSON canónico y relajado (application/ejson)
El formato EJSON, abreviatura de MongoDB Extended JSON, es un superconjunto del JSON estándar que utiliza campos estructurados para representar datos BSON que no tienen tipos JSON correspondientes. Esto representa completamente tus datos, pero requiere que tu cliente entienda cómo trabajar con EJSON.
Hay dos variantes de EJSON:
EJSON canónico utiliza una estructura verbosa que prioriza la conservación de tipos en detrimento de la legibilidad y la interoperabilidad. Representa completamente los tipos BSON, pero podría requerir una biblioteca o código personalizado para trabajar con él.
El EJSON relajado utiliza una estructura más compacta, más fácil de leer y usar, pero puede perder información de tipo para algunos tipos BSON. Por ejemplo, un campo numérico en un documento insertado podría inferirse como un tipo BSON numérico diferente al esperado.
Puede usar EJSON canónico o relajado en los cuerpos de las solicitudes. Los puntos finales de la API de datos configurados para devolver EJSON siempre devuelven EJSON canónico.
BSON Types
Esta sección enumera los tipos BSON que admite la API de datos y muestra cómo se representa cada tipo en formato JSON y EJSON.
Arreglo
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
Binario
EJSON | JSON | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
fecha
EJSON | JSON | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
EJSON canónico EJSON relajado | |
Decimal128
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
Documento
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
Double
EJSON | JSON | |||
|---|---|---|---|---|
EJSON canónico EJSON relajado | |
Int32
EJSON | JSON | |||
|---|---|---|---|---|
EJSON canónico EJSON relajado | |
Entero64
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
MaxKey
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | No hay equivalente JSON |
MinKey
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | No hay equivalente JSON |
ObjectId
EJSON | JSON | ||
|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
Expresión regular
EJSON | JSON | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |
Marca de tiempo
EJSON | JSON | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
EJSON canónico EJSON relajado Igual que Canonical | |