Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Trabajar con datos JSON ampliados

En esta guía, puede aprender a utilizar el formato de datos JSON extendido cuando interactúe con documentos de MongoDB.

JSON es un formato de datos legible por humanos que representa los valores de objetos, arreglos, números, cadenas, booleanos y nulos. Este formato solo admite un subconjunto de tipos de datos BSON, que es el formato que utiliza MongoDB para almacenar datos. El formato Extended JSON admite más BSON types, definiendo un conjunto reservado de claves con el prefijo "$" para representar información del tipo de campo que corresponde directamente a cada tipo en BSON.

MongoDB Extended JSON presenta dos formatos de string para representar datos BSON. Cada formato se ajusta al JSON RFC y cumple casos de uso específicos.

La siguiente tabla describe cada formato JSON extendido:

Nombre
Descripción

Canónico o Extendido

Un formato de cadena que evita la pérdida de información de tipo BSON durante las conversiones de datos.
Este formato prioriza la preservación de tipos a costa de la legibilidad y la interoperabilidad con formatos más antiguos.

Modo Relajado

Un formato de string que describe documentos BSON con cierta pérdida de información de tipo.
Este formato prioriza la legibilidad humana y la interoperabilidad a costa de cierta información de tipo.

Para obtener más información sobre JSON, BSON y JSON extendido, consulta el recurso JSON y BSON y la entrada del manual JSON extendido de MongoDB Server.

El siguiente ejemplo muestra un documento que contiene un campo ObjectId, una fecha y un número largo representados en formato Extended JSON. Seleccione la pestaña Canonical o Relaxed Mode para ver el documento de muestra en cada formato JSON extendido:

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}

Puedes escribir una string JSON extendida a partir de un documento BSON utilizando los métodos toRelaxedExtendedJSON() y toCanonicalExtendedJSON().

El siguiente ejemplo genera un documento BSON en ambos formatos JSON Extendido Relajado y Canonical:

$doc = [
'foo' => [1, 2],
'bar' => ['hello' => 'world'],
'code' => new MongoDB\BSON\Javascript('function x() { return 1; }', []),
'date' => new DateTime('2024-07-20 10:30:00'),
];
echo 'Relaxed format: ' , MongoDB\BSON\Document::fromPHP($doc)->toRelaxedExtendedJSON(), PHP_EOL;
echo 'Canonical format: ' , MongoDB\BSON\Document::fromPHP($doc)->toCanonicalExtendedJSON(), PHP_EOL;
Relaxed format: { "foo" : [ 1, 2 ], "bar" : { "hello" : "world" }, "code" :
{ "$code" : "function x() { return 1; }", "$scope" : { } }, "date" : { } }
Canonical format: { "foo" : [ { "$numberInt" : "1" }, { "$numberInt" : "2" } ],
"bar" : { "hello" : "world" }, "code" : { "$code" : "function x() { return 1; }",
"$scope" : { } }, "date" : { } }

Puedes leer una cadena Extended JSON en un valor PHP llamando al método json_decode(), que convierte Extended JSON en un arreglo o objeto PHP. Pase los siguientes argumentos a json_decode():

  • JSON string extendida para leer.

  • Valor booleano que indica si desea devolver un valor de arreglo. Si se establece en false, el método devuelve un valor de objeto.

El siguiente ejemplo convierte un valor de string JSON extendido a un arreglo PHP:

$ejsonStr = '{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}';
$decodedJson = json_decode($ejsonStr, true);
print_r($decodedJson);
Array
(
[foo] => Array
(
[0] => Array
(
[$numberInt] => 1
)
[1] => Array
(
[$numberInt] => 2
)
)
[bar] => Array
(
[hello] => world
)
[code] => Array
(
[$code] => function x() { return 1; }
[$scope] => Array
(
)
)
[bin] => Array
(
[$binary] => Array
(
[base64] => AQIDBA==
[subType] => 00
)
)
)

Para obtener más información sobre los métodos que se tratan en esta página, consulte la siguiente documentación sobre la API de extensiones de PHP: