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

Tipos de dados

Nesta página

  • Data
  • ObjectId
  • Double
  • Int32
  • Long
  • Decimal128
  • Igualdade e ordem de classificação
  • Timestamp
  • Verificação de tipo
  • Exemplos
  • Data de retorno como uma cadeia de caracteres
  • Return Date
  • Tipos Numéricos
  • Consistência de tipo numérico padrão
  • Timestamp de um novo documento
  • Criar um timestamp personalizado
  • Verificação de tipo com $type()
  • Digite Verificando com um Construtor

O MongoDB armazena dados usando BSON, que é compatível com tipos de dados adicionais que não estão disponíveis no JSON. O shell mongosh tem uma compatibilidade melhor de tipo 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

Dica

Veja também:

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

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.

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 obter 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

Voltar

Alterações de compatibilidade