Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Tipos de JSON

Nesta página

  • 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 remotas 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

Double

1

"double"

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

"long"

Decimal128

19

"decimal"

Min key

-1

"minKey"

Tecla máxima

127

"maxKey"

Para determinar o tipo de um campo, consulte Verificar Tipos na shell mongo.

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.

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 coleção requer um campo _id exclusivo que atua como chave primária. 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:

  • Você pode acessar o tempo de criação de ObjectId em mongosh usando o método ObjectId.getTimestamp().

  • Os ObjectIDs são aproximadamente ordenados por hora de criação, mas não estão perfeitamente ordenados. Classificar uma coleção em um campo _id contendo valores ObjectId é aproximadamente equivalente a classificar por hora 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 legado mongo. 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 de 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.

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.

Dentro de uma única instância mongod, os valores de timestamp no oplog são sempre únicos.

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.

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 data e hora 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.

Voltar

API de Consulta