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.

Tipos de dados

O MongoDB armazena dados usando BSON, que aceita tipos de dados adicionais que não estão disponíveis em JSON. O shell mongosh tem melhor suporte a tipos de dados para drivers do que o shell mongo legado.

Este documento destaca as alterações no uso do tipo entre mongosh e o shell mongo legado. Consulte a referência de JSON estendido para obter mais informações sobre os tipos compatíveis.

mongosh fornece vários métodos para retornar a data, seja como uma string ou como um objeto Date:

  • Date() de retorno que retorna a data atual como uma string.

  • new Date() construtor que retorna um objeto Date usando o wrapper ISODate() .

  • ISODate() construtor que retorna um objeto Date usando o wrapper ISODate() .

mongosh fornece a ObjectId() classe wrapper em torno do tipo de dados ObjectId. Para gerar um novo ObjectId, utilize a seguinte operação em mongosh:

new ObjectId

A partir da versão 1.8.0, o wrapper ObjectId não aceita mais:

  • ObjectId.prototype.generate

  • ObjectId.prototype.getInc

  • ObjectId.prototype.get_inc

  • ObjectId.getInc

O construtor double() pode ser usado para especificar explicitamente um valor duplo:

db.types.insertOne( { "_id": 2, "value": Double(1), "expectedType": "Double" })

Observação

Se o valor do campo for um número que possa ser convertido em um inteiro de 32bits, mongosh o armazenará como Int32. Caso contrário, o mongosh padroniza para armazenar o número como um Double. Para especificar o tipo de valor, use os construtores Double() ou Int32() .

O construtor Int32() pode ser usado para especificar explicitamente 32números inteiros de bits.

db.types.insertOne( { "_id": 1, "value": Int32(1), "expectedType": "Int32" })

Aviso

Os tipos padrão Int32 e Double podem ser armazenados de forma inconsistente se você se conectar à mesma coleção usando tanto o shell mongosh quanto o mongo legado.

O construtor Long() pode ser utilizado para especificar explicitamente um número inteiro de 64 bits.

db.types.insertOne( { "_id": 3, "value": Long(1), "expectedType": "Long" })

Observação

No shell mongo legado, NumberLong() aceitava um valor inteiro ou uma string. Em mongosh, NumberLong() aceita apenas valores de string. Long () fornece métodos para gerenciar conversões de e para valores de 64 bits.

Valores decimais128() são números de ponto flutuante baseados em decimal de 128 bits que emulam o arredondamento decimal com precisão exata.

Essa funcionalidade destina-se a aplicativos que lidam com dados monetários, como computação financeira, fiscal e científica.

O Decimal128 tipo BSON usa o formato de numeração de ponto flutuante decimal IEEE 754 128 que suporta 34 dígitos decimais (isto é, dígitos significativos) e um intervalo de expoentes de −6143 a +6144.

db.types.insertOne( { "_id": 5, "value": Decimal128("1"), "expectedType": "Decimal128" })

Observação

Para usar o tipo de dados Decimal128 com um driver MongoDB, certifique-se de usar uma versão de driver que ofereça suporte a ele.

Os valores do tipo Decimal128 são comparados e classificados com outros tipos numéricos com base em seu valor numérico real. Os valores numéricos do tipo Double com base binária geralmente têm representações aproximadas dos valores com base decimal e podem não ser exatamente iguais às suas representações decimais.

O MongoDB utiliza um carimbo de data/hora BSON internamente no oplog. O tipo Timestamp funciona de maneira similar ao carimbo de data/hora em Java. Use o tipo Date para operações que envolvam datas.

Uma assinatura do Timestamp tem dois parâmetros opcionais.

Timestamp( { "t": <integer>, "i": <integer> } )
Parâmetro
Tipo
Default
Definição

t

inteiro

Hora atual desde a Era UNIX.

Opcional. Um tempo em segundos.

i

inteiro

1

Opcional. Usado para ordenação quando há múltiplas operações em um determinado segundo. i não tem efeito se usado sem t.

Observação

Timestamp() e os valores Timestamp(0, 0) geram carimbos de data/hora do lado do servidor em coleções regulares. Em coleções de séries temporais, esses valores não geram carimbos de data/hora.

Para obter exemplos de uso, consulte Timestamp de um novo documento, Criar um timestamp personalizado.

Utilize o operador de query $type ou examine o construtor de objetos para determinar os tipos.

O operador Javascript typeof retorna valores genéricos, como number ou object, em vez de Int32 ou ObjectId mais específicos.

O operador instanceof do Javascript não é confiável. Por exemplo, o instanceof atribui valores de BSON em uma resposta do servidor a uma classe de base diferente dos valores fornecidos pelo usuário.

Para exemplos de uso, consulte as seções Verificação de tipo com $type() e Verificação de tipo com um construtor.

Para retornar a data como uma string, utilize o método Date(), como no seguinte exemplo:

var myDateString = Date();

Para imprimir o valor da variável, digite o nome da variável no shell, conforme a seguir:

myDateString

O resultado é o valor de myDateString:

Wed Dec 19 2012 01:03:25 GMT-0500 (EST)

Para verificar o tipo, utilize o operador typeof, como no seguinte:

typeof myDateString

A operação retorna string.

mongosh agrupa objetos do tipo Date com o auxiliar ISODate ; entretanto, os objetos permanecem do tipo Date.

O exemplo seguinte utiliza o construtor new Date() e o construtor ISODate() para retornar objetos Date.

var myDate = new Date();var myDateInitUsingISODateWrapper = ISODate();

Você também pode utilizar o operador new com o construtor ISODate().

Para imprimir o valor da variável, digite o nome da variável no shell, conforme a seguir:

myDate

O resultado é o valor Date de myDate envolto no auxiliar ISODate():

ISODate("2012-12-19T06:01:17.171Z")

Para verificar o tipo:

var myDate = ISODate("2021-03-21T06:00:00.171Z")Object.prototype.toString.call(myDate) === "[object Date]"

A operação retorna true.

Considere a collection types:

{ _id: 1, value: 1, expectedType: 'Int32' },{ _id: 2, value: Long("1"), expectedType: 'Long' },{ _id: 3, value: 1.01, expectedType: 'Double' },{ _id: 4, value: Decimal128("1.01"), expectedType: 'Decimal128' },{ _id: 5, value: 3200000001, expectedType: 'Double' }

Esta tabela mostra os resultados do comando db.types.find( <QUERY> ) para o <QUERY> correspondente. Os nomes de tipo e aliases são fornecidos na página de tipos de BSON .

Query
Resultados
{ "value": { $type: "int" }}
{ _id: 1, value: 1, expectedType: 'Int32'}
{ "value": { $type: "long" }}
{ _id: 2, value: Long("1"), expectedType: 'Long'}
{ "value": { $type: "decimal" }}
{ _id: 4, value: Decimal128("1"), expectedType: 'Decimal128'}
{ "value": { $type: "double" }}
{ _id: 3, value: 1.01, expectedType: 'Double'}{ _id: 5, value: 3200000001, expectedType: 'Double'}
{ "value": { $type: "number" }}
{ _id: 1, value: 1, expectedType: 'Int32'}{ _id: 2, value: Long("1"), expectedType: 'Long'}{ _id: 3, value: 1.01, expectedType: 'Double'}{ _id: 4, value: Decimal128("1.01"), expectedType: 'Decimal128'}{ _id: 5, value: 3200000001, expectedType: 'Double'}
{ "value": 1.01}
{ _id: 3, value: 1.01, expectedType: 'Double'}
{ "value": 1}
{ _id: 1, value: 1, expectedType: 'Int32'}{ _id: 2, value: Long("1"), expectedType: 'Long'}

A query { "value": 1.01 } pesquisa implicitamente a representação Double do 1.01. O documento _id: 4 é Decimal128, portanto não está selecionado.

Observe, no entanto, que { "value": 1 } retorna os tipos Int32 e Long.

Considere a coleção typeExample. Esta coleção consiste em dois documentos idênticos, { "a": 1 }. O primeiro documento foi criado na shell legada de mongo, o segundo documento foi criado em mongosh.

Podemos usar o operador $type em um pipeline de agregação para ver o tipo atribuído em cada shell.

db.typeExample.aggregate( [ { $project: { "valueType": { "$type": "$a" }, "_id": 0 } } ])

No primeiro documento, criado na shell mongo legada, o valor foi armazenado como double. No documento mongosh o valor foi armazenado como tipo int.

[ { valueType: 'double' // inserted in legacy mongo shell }, { valueType: 'int' // inserted in mongosh }]

Use Timestamp() sem parâmetros para inserir vários documentos usando as configurações padrão:

db.flights.insertMany( [ { arrival: "true", ts: Timestamp() }, { arrival: "true", ts: Timestamp() }, { arrival: "true", ts: Timestamp() } ])

Execute db.flights.find({}) para ver os timestamps. Observe que, embora todas as três entradas tenham sido marcadas no mesmo segundo, o intervalo foi incrementado em cada uma delas.

[ { _id: ObjectId("6114216907d84f5370391919"), arrival: 'true', ts: Timestamp({ t: 1628709225, i: 1 }) }, { _id: ObjectId("6114216907d84f537039191a"), arrival: 'true', ts: Timestamp({ t: 1628709225, i: 2 }) }, { _id: ObjectId("6114216907d84f537039191b"), arrival: 'true', ts: Timestamp({ t: 1628709225, i: 3 }) }]

Use parâmetros personalizados para inserir vários documentos com um Timestamp específico.

Esta operação insere três documento na coleção flights e usa o valor de Era UNIX 1627811580 para definir os horários de ts para 9:53 GMT em 1 agosto de 2021.

db.flights.insertMany( [ { arrival: "true", ts: Timestamp(1627811580, 10) }, { arrival: "true", ts: Timestamp(1627811580, 20) }, { arrival: "true", ts: Timestamp(1627811580, 30) } ])

Os documentos resultantes têm a seguinte aparência:

[ { _id: ObjectId("6123d8315e6bba6f61a1031c"), arrival: 'true', ts: Timestamp({ t: 1627811580, i: 10 }) }, { _id: ObjectId("6123d8315e6bba6f61a1031d"), arrival: 'true', ts: Timestamp({ t: 1627811580, i: 20 }) }, { _id: ObjectId("6123d8315e6bba6f61a1031e"), arrival: 'true', ts: Timestamp({ t: 1627811580, i: 30 }) }]

O operador de query $type aceita um alias de string ou um código numérico correspondente ao tipo de dados. Consulte Tipos BSON para obter uma lista de tipos de dados BSON e seus códigos numéricos correspondentes.

Por exemplo, estas verificações para o tipo Decimal128 são equivalentes:

db.types.find( { "value": { $type: "decimal" } } )db.types.find( { "value": { $type: 19 } } )

Examine o objeto constructor para determinar o tipo. Por exemplo, a saída de db.collection.find() é um Cursor.

var findResults = db.housing.find({"multiUnit": true} )findResults.constructor.name // Returns the type