Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Tipos de JSON

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

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.

JavaScript com escopo

15

"javascriptWithScope"

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"

  • O operador $type suporta utilizar estes valores para fazer uma query de campos pelo seu tipo BSON. $type também suporta o codinome number, que corresponde aos tipos de BSON inteiro, decimal, double e longo.

  • O operador de aggregation $type retorna o tipo BSON de seu argumento.

  • O operador de aggregation $isNumber retorna true se seu argumento for um inteiro BSON, decimal, double ou longo. Novidades na versão 4,4

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 5bytes gerado uma vez por processo do lado do cliente. Este valor aleatório é exclusivo da máquina e do processo. Se o processo reiniciar ou o nó primário do processo mudar, este valor será gerado novamente.

  • Um contador de incremento de 3bytes por processo do lado do cliente, inicializado com um valor aleatório. O contador é reiniciado quando um processo é reiniciado.

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.

In MongoDB, each document stored in a standard collection requires a unique _id field that acts as a primary key. If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field.

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:

  • You can access ObjectId creation time in mongosh using the ObjectId.getTimestamp() method.

  • 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

    While ObjectId values should increase over time, they are not necessarily monotonic. This is because they:

    • Only contain one second of temporal resolution, so ObjectId values created within the same second do not have a guaranteed ordering, and

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

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

Starting in MongoDB 5.0, mongosh replaces the legacy mongo shell. The ObjectId() methods work differently in mongosh than in the legacy mongo shell. For more information on the legacy methods, see Legacy mongo Shell.

BSON strings are UTF-8. In general, drivers for each programming language convert from the language's string format to UTF-8 when serializing and deserializing BSON. This makes it possible to store most international characters in BSON strings with ease. [1] In addition, MongoDB $regex queries support UTF-8 in the regex string.

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

BSON has a special timestamp type for internal MongoDB use and is not associated with the regular Date type. This internal timestamp type is a 64 bit value where:

  • 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

The BSON timestamp type is for internal MongoDB use. For most cases, in application development, use the BSON date type. See Date for more information.

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.

BSON Date type is signed. [2] Negative values represent dates before 1970.

To construct a Date in mongosh, you can use the new Date() or ISODate() constructor.

Para construir um Date com o construtor new Date(), execute o seguinte comando:

var mydate1 = new Date()

A variável mydate1 gera uma data e hora encapsuladas como um ISODate:

mydate1
ISODate("2020-05-11T20:14:14.796Z")

Para construir uma Date usando o construtor ISODate(), execute o seguinte comando:

var mydate2 = ISODate()

A variável mydate2 armazena uma data e hora encapsuladas como um ISODate:

mydate2
ISODate("2020-05-11T20:14:14.796Z")

Para imprimir a Date no formato string, utilize o método toString():

mydate1.toString()
Mon May 11 2020 13:14:14 GMT-0700 (Pacific Daylight Time)

Você também pode retornar a parte do mês do valor Date. Os meses são indexados em zero, então janeiro é o mês 0.

mydate1.getMonth()
4
[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 faixa 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.

decimal128 é uma representação decimal de 128 bits para armazenar números muito grandes ou muito precisos, sempre que o arredondamento de decimais for importante. Foi criado em agosto de 2009 como parte da revisão IEEE 754-2008 de pontos flutuantes. Quando precisar de alta precisão ao trabalhar com tipos de dados BSON, você deve usar decimal128.

decimal128 suporte para 34 dígitos decimais de precisão ou mantissa com uma faixa de expoentes de -6143 a +6144. A mantissa não é normalizada no padrão decimal128, permitindo várias representações possíveis: 10 x 10^-1 = 1 x 10^0 = .1 x 10^1 = .01 x 10^2, etc. Ter a capacidade de armazenar valores máximos e mínimos na ordem de 10^6144 e 10^-6143, respectivamente, permite uma grande precisão.

No MongoDB, é possível armazenar dados no formato decimal128 utilizando o construtor Decimal128(). Se você passar o valor decimal como uma string, o MongoDB armazenará o valor no banco de dados da seguinte forma:

Decimal128("9823.1297")

Você também pode passar o valor decimal como um double:

Decimal128.fromStringWithRounding("1234.99999999999")

Você também deve considerar o uso e o suporte que a sua linguagem de programação oferece para decimal128. As seguintes linguagens não oferecem suporte nativo a este recurso e exigem um plugin ou pacote adicional para obter a funcionalidade:

Quando você realiza cálculos matemáticos programaticamente, pode às vezes obter resultados inesperados. O exemplo a seguir em Node.js gera resultados incorretos:

> 0.1
0.1
> 0.2
0.2
> 0.1 * 0.2
0.020000000000000004
> 0.1 + 0.1
0.010000000000000002

Da mesma forma, o exemplo a seguir em Java gera uma saída incorreta:

1class Main {
2 public static void main(String[] args) {
3 System.out.println("0.1 * 0.2:");
4 System.out.println(0.1 * 0.2);
5 }
6}
10.1 * 0.2:
20.020000000000000004

Os mesmos cálculos em Python, Ruby, Rust e outras linguagens produzem os mesmos resultados. Isso acontece porque números de ponto flutuante binário não representam bem os valores na base 10.

Por exemplo, o 0.1 utilizado nos exemplos acima é representado em binário como 0.0001100110011001101. Na maioria dos casos, isso não causa problemas consideráveis. No entanto, em aplicativos de finanças ou bancos, por exemplo, onde a precisão é fundamental, use decimal128 como seu tipo de dados.

Para ver como drivers específicos lidam com o BSON, consulte a documentação do driver: