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

MongoDB Extended JSON (v1)

Nesta página

  • MongoDB Extended JSON v1 e drivers MongoDB
  • Analisadores e formato suportado
  • Tipos de dados JSON e representações associadas

Importante

Desambiguação

A página a seguir discute o MongoDB Extended JSON v1 (JSON estendido legado). Para uma discussão sobre o MongoDB Extended JSON v2, consulte MongoDB Extended JSON (v2).

Para tipos de dados suportados no mongo, consulte Tipos de dados mongosh.

O JSON só pode representar um subconjunto dos tipos suportados por BSON. Para preservar informações de tipo, MongoDB adiciona as seguintes extensões ao formato JSON:

A representação utilizada para os vários tipos de dados depende do contexto em que o JSON é analisado.

Os drivers a seguir usam o JSON estendido v1.0 (Legado)

  • C#

  • Ruby

Para os outros drivers, consulte MongoDB Extended JSON (v2).

O seguinte pode analisar representações no modo estrito com reconhecimento das informações do tipo.

Outros analisadores JSON, incluindo mongo shell, podem analisar representações de modo estrito como pares de chave/valor, mas sem reconhecimento das informações do tipo.

O seguinte pode analisar representações no modo de shell mongo com reconhecimento das informações do tipo.

  • mongoimport versão 4.0 e anterior

  • --query opção de várias ferramentas MongoDB

  • mongo Shell

Versão anterior 4.2, mongoexport gera dados no modo Strict do MongoDB Extended JSON v1.

Antes da versão 4.2, bsondump gera resultados no modo mongo shell .

A seguir, os tipos de dados BSON e as representações associadas no modo Strict e no modo shell mongo.

data_binary
Modo rigoroso
mongo Modo shell
{ "$binary": "<bindata>", "$type": "<t>" }
BinData ( <t>, <bindata> )

Onde os valores são os seguintes:

  • <bindata> é a representação base64 de uma string binária.

  • <t> é uma representação de um único byte indicando o tipo de dados. No modo Strict , é uma string hexadecimal e, no modoshell , é um inteiro. Consulte a documentação BSON estendida . http://bsonspec.org/spec.html

data_date
Modo rigoroso
mongo Modo shell
{ "$date": "<date>" }
new Date ( <date> )

No modo Estrito, <date> é um formato de data ISO-8601 com um campo de fuso horário obrigatório seguindo o modelo YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>.

No modoshell , <date> é a representação JSON de um número inteiro assinado de 64bits que fornece o número de milissegundos desde a época UTC.

data_timestamp
Modo rigoroso
mongo Modo shell
{ "$timestamp": { "t": <t>, "i": <i> } }
Timestamp( <t>, <i> )

Onde os valores são os seguintes:

  • <t> é a representação JSON de um número inteiro não assinado de 32bits para segundos desde a época.

  • <i> é um número inteiro não assinado de 32bits para o incremento.

data_regex
Modo rigoroso
mongo Modo shell
{ "$regex": "<sRegex>", "$options": "<sOptions>" }
/<jRegex>/<jOptions>

Onde os valores são os seguintes:

  • <sRegex> é uma string de caracteres JSON válidos.

  • <jRegex> é uma string que pode conter caracteres JSON válidos e caracteres de aspas duplas sem recapitulação ("), mas não pode conter caracteres de barra invertida sem recapitulação (/).

  • <sOptions> é uma string contendo as opções de regex representadas pelas letras do alfabeto.

  • <jOptions> é uma string que pode conter apenas os caracteres "g", "i", "m" e "s" (adicionado na v1.9). Como as representações JavaScript e mongo Shell suportam uma gama limitada de opções, quaisquer opções não conformes serão descartadas ao converter para essa representação.

data_oid
Modo rigoroso
mongo Modo shell
{ "$oid": "<id>" }
ObjectId( "<id>" )

Onde os valores são os seguintes:

  • <id> é uma string hexadecimal de 24caracteres.

data_ref
Modo rigoroso
mongo Modo shell
{ "$ref": "<name>", "$id": "<id>" }
DBRef("<name>", "<id>")

Onde os valores são os seguintes:

  • <name> é uma string de caracteres JSON válidos.

  • <id> é qualquer tipo de JSON estendido válido.

data_undefined
Modo rigoroso
mongo Modo shell
{ "$undefined": true }
undefined

A representação do tipo indefinido JavaScript/BSON.

Você não pode usar undefined em documentos de query. Considere o seguinte documento inserido na collection people usando o shell mongo legado:

db.people.insertOne( { name : "Sally", age : undefined } )

As seguintes queries retornam um erro:

db.people.find( { age : undefined } )
db.people.find( { age : { $gte : undefined } } )

No entanto, você pode consultar valores indefinidos usando $type, como em:

db.people.find( { age : { $type : 6 } } )

Esta query retorna todos os documentos para os quais o campo age tem valor undefined.

Importante

O tipo de BSON indefinido está obsoleto. mongosh armazena um valor nulo.

Por exemplo, use o mesmo código para inserir um documento no mongosh e no shell mongo legado:

db.people.insertOne( { name : "Sally", age : undefined } )

Os documentos resultantes são diferentes:

{ "name" : "Sally", "age" : null }
{ "name" : "Sally", "age" : undefined }
data_minkey
Modo rigoroso
mongo Modo shell
{ "$minKey": 1 }
MinKey

A representação do tipo de dados MinKey BSON que se compara abaixo de todos os outros tipos. Consulte Comparação/Ordem de Classificação para obter mais informações sobre a ordem de comparação dos BSON types.

data_maxkey
Modo rigoroso
mongo Modo shell
{ "$maxKey": 1 }
MaxKey

A representação do tipo de dados MaxKey BSON que compara mais alto do que todos os outros tipos. Consulte Comparação/Ordem de Classificação para obter mais informações sobre a ordem de comparação dos BSON types.

data_numberlong
Modo rigoroso
mongo Modo shell
{ "$numberLong": "<number>" }
NumberLong( "<number>" )

NumberLong é um número inteiro assinado de 64 bits. No shell mongo legado, você deve usar aspas para inserir uma NumberLong ou a operação produzirá um erro.

Por exemplo, os seguintes comandos tentam inserir 9223372036854775807 como NumberLong com e sem aspas em torno do valor inteiro:

db.json.insertOne( { longQuoted : NumberLong("9223372036854775807") } )
db.json.insertOne( { longUnQuoted : NumberLong(9223372036854775807) } )

A linha destacada produz um erro no shell mongo legado. A inserção é bem-sucedida em mongosh.

Novidade na versão 3.4.

data_numberdecimal
Modo rigoroso
mongo Modo shell
{ "$numberDecimal": "<number>" }
NumberDecimal( "<number>" )

NumberDecimal é um decimal de alta precisão. Você deve incluir aspas, senão o número de entrada será tratado como um valor duplo, resultando em perda de dados.

Por exemplo, os comandos a seguir inserem 123.40 como NumberDecimal com e sem aspas ao redor do valor:

db.json.insertOne( { decimalQuoted : NumberDecimal("123.40") } )
db.json.insertOne( { decimalUnQuoted : NumberDecimal(123.40) } )

Quando você recupera os documentos, o valor de decimalUnQuoted é alterado, enquanto decimalQuoted mantém a precisão especificada:

db.json.find()
{ "_id" : ObjectId("596f88b7b613bb04f80a1ea9"), "decimalQuoted" : NumberDecimal("123.40") }
{ "_id" : ObjectId("596f88c9b613bb04f80a1eaa"), "decimalUnQuoted" : NumberDecimal("123.400000000000") }

Importante

Esse comportamento de inserção é diferente em mongosh.

O formato de string entre aspas, NumberDecimal("123.40"), está obsoleto. A inserção é bem-sucedida, mas também produz um aviso.

O formato de string sem aspas, NumberDecimal(123.40), armazena o valor como 123.4. O 0 final é descartado.

Voltar

JSON estendido (v2)