Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Tipos de JSON

Nesta página

  • Dados binários
  • ObjectId
  • String
  • Carimbos de data e hora
  • Data

BSON é um formato de serialização binária usado para armazenar documentos e fazer chamadas de procedimento remoto no MongoDB. A especificação BSON está localizada em bsonspec.org.

Cada tipo de BSON tem identificadores de número inteiro e de string, conforme listado na tabela a seguir:

Tipo
Número
Alias
Notas
Duplo
1
"duplo"
String
2
"string"
Objeto
3
"objeto"
Array
4
"array"
Dados binários
5
"binData"
Indefinido
6
" indefinido "
Obsoleto.
ObjectId
7
"objectId"
Boolean
8
"bool"
Data
9
"data"
Zero
10
"nulo"
Expressão regular
11
"regex"
DBPointer
12
"dbPointer"
Obsoleto.
JavaScript
13
"javascript"
Símbolo
14
"símbolo"
Obsoleto.
Inteiro de bits
16
"int"
Timestamp
17
" carimbo de data/hora "
Inteiro de 64 bits
18
"longo"
Decimal128
19
"decimal"
Chave mín.
-1
"minKey"
Tecla máxima
127
"maxKey"

Para determinar o tipo de um campo, consulte Verificação de tipo.

Se você converter BSON em JSON, consulte a referência de JSON estendido .

As seções a seguir descrevem considerações especiais para tipos específicos de BSON.

Um valor binário BSON binData é uma array de bytes. Um valor binData tem um subtipo que indica como interpretar os dados binários. A tabela a seguir mostra os subtipos.

Número
Subtipo
0
Subtipo binário genérico
1
Dados de Função
2
Binário (antigo)
3
UUID (antigo)
4
UUID
5
md5
6
Valor BSON criptografado
7

Dados de série temporal compactados

Novidades na versão 5,2.

128
Dados personalizados

ObjectIds são pequenos, provavelmente únicos, rápidos de gerar e ordenados. Os valores ObjectId têm 12 bytes de comprimento, consistindo em:

  • Um carimbo de data/hora de bytes, representando a criação do ObjectID, medido em segundos desde a época do Unix.

  • Um valor aleatório de 5 bytes gerado uma vez por processo. Este valor aleatório é exclusivo da máquina e do processo.

  • Um contador incrementador de 3 bytes, inicializado para um valor aleatório.

Para valores de carimbo de data/hora e contador, os bytes mais significativos aparecem primeiro na sequência de bytes (big-endian). Isto é diferente de outros valores de BSON, onde os bytes menos significativos aparecem primeiro (little-endian).

Se um valor inteiro for usado para criar um ObjectId, o número inteiro substituirá o carimbo de data/hora.

No MongoDB, cada documento armazenado em uma collection requer um campo _id exclusivo que atua como uma primary key. Se um documento inserido omitir o campo _id , o driver MongoDB gerará automaticamente um ObjectID para o campo _id .

Isso também se aplica a documentos inseridos por meio de operações de atualização com upsert: true.

Os clientes do MongoDB devem adicionar um campo _id com um ObjectId único. A utilização de ObjectIds para o campo _id fornece os seguintes benefícios adicionais:

  • em mongosh, você pode acessar o tempo de criação do ObjectId, utilizando o método ObjectId.getTimestamp() .

  • classificando em um campo _id que armazena ObjectId valores é aproximadamente equivalente à classificação por tempo de criação.

    Importante

    Embora os valores de ObjectId devam aumentar com o tempo, eles não são necessariamente monotônicos. Isso ocorre porque eles:

    • Contêm apenas um segundo de resolução temporal, portanto, os valores de ObjectId criados no mesmo segundo não têm uma ordenação garantida, e

    • São gerados por clientes, que podem ter relógios de sistema diferentes.

Utilize os métodos ObjectId() para configurar e recuperar valores ObjectId.

A partir do MongoDB 5.0, mongosh substitui o shell mongo legado. Os métodos ObjectId() funcionam de maneira diferente em mongosh e no shell mongo herdado. Para obter mais informações sobre os métodos legados, consulte Legacy mongo Shell.

As strings JSON são UTF-8. Em geral, os drivers para cada linguagem de programação convertem do formato de cadeia de caracteres da linguagem para UTF-8 ao serializar e desserializar BSON. Isso torna possível armazenar a maioria dos caracteres internacionais em strings BSON com facilidade. [1] Além disso, as $regex queries do MongoDB suportam UTF-8 na string regex.

[1] Dadas strings usando conjuntos de caracteres UTF-8, usar sort() em strings será razoavelmente correto. No entanto, como internamente sort() usa a api de strcmp C++, a ordem de classificação pode manipular alguns caracteres incorretamente.

O BSON tem um tipo especial de carimbo de data/hora para uso interno do MongoDB e não está associado ao tipo normal de Data . Esse tipo de carimbo de data/hora interno é um valor 64 bits em que:

  • os 32 bits mais significativos são um valor de time_t (segundos desde a época Unix)

  • os 32 bits menos significativos são um ordinal incremental para operações dentro de um determinado segundo.

Enquanto o formato BSON é little-endian e, portanto, armazena os bits menos significativos primeiro, a instância mongod sempre compara o valor time_t antes do valor ordinal em todas as plataformas, independentemente da endianidade.

Dentro de uma única instância do mongod, os valores de carimbo de data/hora são sempre únicos.

Na replicação, o oplog tem um campo ts. Os valores neste campo refletem o tempo de operação, que utiliza um valor de carimbo de data/hora BSON.

Observação

O tipo de carimbo de data/hora BSON é para uso interno do MongoDB. Na maioria dos casos, no desenvolvimento de aplicativos, você desejará usar o tipo de data BSON. Consulte Data para obter mais informações.

Ao inserir um documento que contenha campos de nível superior com valores de carimbo de data/hora vazios, o MongoDB substitui os valores de carimbo de data/hora vazios pelo valor de carimbo de data/hora atual pela seguinte exceção. Se o campo _id contiver um valor de carimbo de data/hora vazio, ele sempre será inserido como está e não substituído.

Exemplo

Inserir um documento com um valor de carimbo de data/hora vazio:

db.test.insertOne( { ts: new Timestamp() } );

A execução do db.test.find() retornaria um documento semelhante ao seguinte:

{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }

O servidor substituiu o valor de carimbo de data/hora vazio por ts pelo valor de carimbo de data/hora no momento da inserção.

Data de JSON é um número inteiro de 1 bits que representa o número de milissegundos desde a época do Unix (1 de janeiro de 1970). Isso resulta em um período representável de cerca de 290 milhões de anos no passado e no futuro.

A especificação oficial da BSON refere-se ao tipo BSON Date como datetime UTC.

O tipo de data BSON está assinado. [2] Valores negativos representam datas anteriores a 1970.

Exemplo

Construa uma Data usando o construtor new Date() em mongosh:

var mydate1 = new Date()

Exemplo

Construa uma Data usando o construtor ISODate() em mongosh:

var mydate2 = ISODate()

Exemplo

Retorne o valor da Data como string:

mydate1.toString()

Exemplo

Retorna a parte mensal do valor da data; os meses são indexados a zero, então janeiro é o mês 0:

mydate1.getMonth()
[2] Antes da versão 2.0, os valores Date eram interpretados incorretamente como números inteiros sem sinal, o que afetava as classificações, as queries de intervalo e os índices nos campos Date. Como os índices não são recriados durante a atualização, reindexe se tiver criado um índice sobre os valores Date com uma versão anterior e se as datas anteriores a 1970 forem relevantes para o seu aplicativo.
← API de query do MongoDB