Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual 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.

Para tipos de dados suportados no shell mongo legado, consulte /core/shell-types.

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 concha

Antes da versão 4.2, mongoexport gera dados no modo Strict do MongoDB Extended JSON v1.

Antes da versão 4.2, bsondump saídas no modo mongo Shell.

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

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 modo Shell , é um inteiro. Consulte a documentação estendida do bson. 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 modo Shell, <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 cadeia 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. armazena um valormongosh 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 tipos de BSON.

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 tipos de BSON.

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.

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.

← MongoDB Extended JSON (v2)