Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

$toObject (operador de expressão )

$toObject

Converte uma string em um objeto. Se o valor não puder ser convertido, $toObject apresentará erro. Se o valor for null ou estiver ausente, $toObject retornará nulo.

$toObject tem a seguinte sintaxe:

{
$toObject: <expression>
}

$toObject recebe qualquer expressão válida.

$toObject é uma abreviatura para a seguinte expressão $convert :

{ $convert: { input: <expression>, to: "object" } }

A tabela seguinte descreve o comportamento do $toObject para diferentes tipos de entrada:

Tipo de entrada
Comportamento

String

Retorna um documento correspondente ao conteúdo dentro da string.

A string deve conter caracteres que representam um objeto JSON válido.

Nulo ou Ausente

Retorna nulo.

Ao converter uma string em um objeto, $toObject:

  • Exige sintaxe JSON válida. Comentários e vírgulas à direita não são permitidos.

  • Requer que o valor de nível superior seja um objeto. Se a string não representar um objeto, $toObject apresentará erro.

  • Não interpreta wrappers de tipo JSON estendido como $oid, $date ou Timestamp(...). Eles permanecem strings ou objetos aninhados no resultado.

  • Preserva o último valor quando o objeto contém nomes de campo duplicados. Os valores anteriores para o mesmo campo são descartados.

$toObject converte tipos numéricos com base em seu valor e formato:

  • Os números inteiros dentro do intervalo assinado de 32bits tornam-se int.

  • Os inteiros fora do intervalo de 32bits, mas dentro do intervalo de 64bits assinados, tornam-se long.

  • Inteiros fora do intervalo assinado de 64bits tornam-se double, o que pode resultar em perda de precisão.

  • Números com um ponto decimal ou notação expoente se tornam double.

A tabela a seguir mostra exemplos de uso de $toObject para converter strings em objetos:

Exemplo
Resultados

$toObject: "{\"a\": 1, \"b\": 2}"

{ a: 1, b: 2 }

$toObject: "{}"

{ }

$toObject: "[]"

Erro: a entrada não corresponde ao tipo esperado "objeto"

$toObject: "123"

Erro: a entrada não representa um JSON válido: valor autônomo inesperado

$toObject: "{\"nam\\u0000e\": \"foo\"}"

Erro: a entrada não representa um JSON válido: byte nulo incorporado ilegal

Observação

A string deve conter caracteres que representem um objeto válido .

$toObject: "{\"name\": \"fo\\u0000o\"}"

{ name: 'fox00o' }

$toObject: "{\"a\": 1, \"b\": 2, \"a\": 3}"

{ a: 3, b: 2 }

Observação

O último valor do mesmo campo é preservado.

$toObject: "{\"foo\": null}"

{foo: null }

$toObject: "{\"foo\": false}"

{foo: false }

$toObject: "{\"__proto__\": {\"foo\": null}}"

{ ['__proto__']: {foo: null } }

$toObject: "{\"foo\": \"NaN\"}"

{ foo: 'NaN' }

$toObject: "{\"foo\": 123}"

{foo: 123 }

$toObject: "{\"foo\": 4294967296}"

{foo: Long('4294967296') }

Observação

O número está fora do intervalo assinado de 32bits, portanto, é convertido em um longo.

$toObject: "{\"foo\": 1.123123}"

{foo: 1.123123 }

$toObject: "{\"foo\": 1.2e+3}"

{foo: 1200 }

$toObject: "{\"largePos\": 18446744073709551615}"

{ largePos: 18446744073709552000 }

Observação

O número está fora do intervalo assinado de 64bits, portanto, é convertido em um valor duplo com perda de precisão.

$toObject: "{\"largeNeg\": -18446744073709551615}"

{ largeNeg: -18446744073709552000 }

Observação

O número está fora do intervalo assinado de 64bits, portanto, é convertido em um valor duplo com perda de precisão.

$toObject: null

zero

Crie uma coleção com strings armazenadas em um campo:

db.jsonStrings.insertOne({
_id: 1,
config: '{"feature": true, "threshold": 10}'
})

A seguinte agregação converte a string no config para um objeto:

db.jsonStrings.aggregate([
{
$project: {
_id: 0,
parsedConfig: { $toObject: "$config" }
}
}
])

Esta operação retorna um documento onde parsedConfig é um documento aninhado com um booleano e um valor inteiro:

{ parsedConfig: { feature: true, threshold: 10 } }

Observação

Se a operação de conversão encontrar um erro, a operação de aggregation interromperá e exibirá um erro. Para substituir esse comportamento, use $convert em vez disso.

Voltar

$toLong

Nesta página