Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/

Trabalhe com dados JSON estendidos

JSON é um formato de dados que representa os valores de objetos, arrays, números, strings, booleans e nulos. O formato Extended JSON define um conjunto reservado de chaves prefixadas com "$" para representar informações de tipos de campos que correspondem diretamente a cada tipo em BSON, o formato usado pelo MongoDB para armazenar dados.

O MongoDB Extended JSON apresenta diferentes formatos de string para representar dados BSON. Cada um dos formatos está em conformidade com o JSON RFC e atende a casos de uso específicos. O formato estendido, também conhecido como formato canônico, apresenta representações específicas para cada tipo BSON para conversão bidirecional sem perda de informações. O formato Modo Relaxado é mais conciso e semelhante ao JSON comum, mas não representa todas as informações de tipo, como a largura de bits específica dos campos numéricos.

Consulte a tabela a seguir para ver uma descrição de cada formato:

Nome
Descrição

Extended

Also known as the Canonical format, this JSON representation avoids loss of BSON type information.
This format prioritizes type preservation at the loss of human-readability and interoperability with older formats.

Modo relaxado

JSON representation that describes BSON documents with some type information loss.
This format prioritizes human-readability and interoperability at the loss of certain type information.

Para saber mais sobre JSON, BSON e Extended JSON, consulte nosso artigo sobre JSON e BSON e Extended JSON no manual do MongoDB Server.

Os exemplos abaixo mostram um documento contendo um campo de ObjectId, data e número longo representado no formato Extended JSON. Clique na aba correspondente ao formato do exemplo que deseja ver:

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

Você pode gravar uma string de JSON estendida a partir de um objeto de documento BSON usando o método EJSON.stringify().

O exemplo a seguir gera uma string de Extended JSON no formato Relaxed:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc);
console.log(ejsonStr);
{"foo":[1,2],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":"2024-07-20T14:30:00Z"}}

Por padrão, o método stringify() retorna a string de JSON estendida no formato relaxado. Para especificar o formato canônico, configure a opção relaxed para false.

O exemplo a seguir mostra como gerar JSON estendido no formato canônico:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc, { relaxed: false });
print(ejsonStr)
{"foo":[{"$numberInt":"1"},{"$numberInt":"2"}],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":{"$numberLong":"1721485800000"}}}

Você pode ler uma string de JSON estendida no valor ou objeto JavaScript descrito pela string usando o método EJSON.parse().

O exemplo abaixo mostra como ler uma string de JSON estendida em um valor ou objeto JavaScript usando o método parse():

import { BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const ejsonStr = `{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}`;
const doc = EJSON.parse(ejsonStr);
console.log(doc);
{
foo: [ 1, 2 ],
bar: { hello: 'world' },
code: new Code('function x() { return 1; }', {}),
bin: Binary.createFromBase64('AQIDBA==', 0)
}

Observação

O driver analisa o tipo de JSON estendido $uuid de uma string para um objeto BsonBinary de subtipo binário 4. Para obter mais informações sobre a análise do campo $uuid, consulte a seção Regras especiais para analisar campos $uuid na especificação de JSON estendido.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a documentação da API EJSON.

Voltar

BSON

Nesta página