MongoDB Extended JSON (v1)
Nesta página
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:
Modo rigoroso. As representações de modo estrito dos BSON types estão em conformidade com o JSON RFC. Qualquer analisador JSON pode analisar essas representações de modo estrito como pares chave/valor; no entanto, somente o analisador JSON interno do MongoDB reconhece as informações de tipo transmitidas pelo formato.
mongo
Modo shell. O analisador JSON interno do MongoDB e o shellmongo
podem analisar esse modo.
A representação utilizada para os vários tipos de dados depende do contexto em que o JSON é analisado.
MongoDB Extended JSON v1 e drivers MongoDB
Os drivers a seguir usam o JSON estendido v1.0 (Legado)
C#
Ruby
Para os outros drivers, consulte MongoDB Extended JSON (v2).
Analisadores e formato suportado
Entrada no Modo Estrito
O seguinte pode analisar representações no modo estrito com reconhecimento das informações do tipo.
mongoimport
versão 4.0 e anterior--query
opção de várias ferramentas MongoDB
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.
Entrada no mongo
Modo Shell
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 MongoDBmongo
Shell
Saída no modo estrito
Versão anterior 4.2, mongoexport
gera dados no modo Strict do MongoDB Extended JSON v1.
Saída no mongo
Modo Shell
Antes da versão 4.2, bsondump
gera resultados no modo mongo
shell .
Tipos de dados JSON e representações associadas
A seguir, os tipos de dados BSON e as representações associadas no modo Strict e no modo shell mongo
.
Binário
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
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 modeloYYYY-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.
Timestamp
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.
Expressão regular
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çõesJavaScript
emongo Shell
suportam uma gama limitada de opções, quaisquer opções não conformes serão descartadas ao converter para essa representação.
vazio
data_oid
- Modo rigoroso
mongo
Modo shell{ "$oid": "<id>" } ObjectId( "<id>" )
Onde os valores são os seguintes:
<id>
é uma string hexadecimal de 24caracteres.
Referência do banco de dados
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.
Tipo indefinido
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 collectionpeople
usando o shellmongo
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 valorundefined
.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 shellmongo
legado:db.people.insertOne( { name : "Sally", age : undefined } ) Os documentos resultantes são diferentes:
{ "name" : "Sally", "age" : null } { "name" : "Sally", "age" : undefined }
Chave mín.
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.
Tecla máxima
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.
Número longo
data_numberlong
- Modo rigoroso
mongo
Modo shell{ "$numberLong": "<number>" } NumberLong( "<number>" ) NumberLong
é um número inteiro assinado de 64 bits. No shellmongo
legado, você deve usar aspas para inserir umaNumberLong
ou a operação produzirá um erro.Por exemplo, os seguintes comandos tentam inserir
9223372036854775807
comoNumberLong
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 emmongosh
.
NumberDecimal
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
comoNumberDecimal
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, enquantodecimalQuoted
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 como123.4
. O0
final é descartado.