Definição
Compatibilidade
Você pode utilizar o $convert para implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
Alterado na versão 8.3.
{ $convert: { input: <expression>, to: <type expression> || { type: <type expression>, subtype: <int> }, base: <expression>, // new in 8.3 format: <string>, onError: <expression>, onNull: <expression> }}$convert obtém um documento com os seguintes campos:
Campo | necessidade | Descrição |
|---|---|---|
| Obrigatório | O argumento pode ser qualquer expressão válida. Para mais informações sobre expressões, consulte Expressões. A partir do MongoDB 8.1, você pode definir o campo
A partir do MongoDB,8.3 você também pode definir o O MongoDB também suporta estes tipos numéricos como entrada ao converter um valor em A partir do MongoDB 9.0, se o campo |
| Obrigatório | Especifica o tipo para converter a expressão
|
| Obrigatório se especificar | O argumento pode ser qualquer expressão válida que resolva para um identificador numérico ou de string. Para identificadores disponíveis, consulte Identificadores de tipo. |
| Opcional | Se |
| Opcional | Especifica a ordem de bytes endian big ou little para conversões entre |
| Opcional | Base de número inteiro para conversões entre tipos de string e numéricos.
Novidades na versão 8.3. |
| Obrigatório ao converter de ou para | Especifica o formato de conversões entre
Se |
| Opcional | Valor a ser retornado ao encontrar um erro durante a conversão, incluindo conversões de tipo não suportadas. Os argumentos podem ser qualquer expressãoválida. Se não for especificada, a operação gera um erro ao encontrar um erro e é interrompida. |
| Opcional |
Além de $convert, o MongoDB fornece os seguintes operadores de agregação como abreviação quando o comportamento padrão "onError" e "onNull" é aceitável:
Identificadores de tipo
O campo to.type aceita os seguintes identificadores numéricos e de string:
Identificador de string | Identificador numérico | Notas |
|---|---|---|
"double" | 1 | Consulte Converter para double. |
"string" | 2 | Consulte Converter para string. |
"objeto" | 3 | Consulte Converter para objeto. |
"array" | 4 | Consulte Converter para array. |
"binData" | 5 | Consulte Converter em BinData. |
"objectId" | 7 | Consulte converter para ObjectId. |
"bool" | 8 | Consulte Converter para booleano. |
"data" | 9 | Consulte Converter para data. |
"int" | 16 | Consulte Converter para número inteiro. |
"long" | 18 | Consulte Converter para longo. |
"decimal" | 19 |
Subtipos binários
A tabela a seguir lista os valores válidos para o campo to.subtype:
Número | Descrição |
|---|---|
0 | Subtipo binário genérico |
1 | Dados de Função |
2 | Binário (antigo) |
3 | UUID (antigo) |
4 | UUID |
5 | md5 |
6 | Valor BSON criptografado |
7 | Dados de série temporal compactados Novidades na versão 5.2. |
8 | Dados confidenciais, como uma chave ou segredo. O MongoDB não registra valores literais para dados binários com subtipo 8. Em vez disso, o MongoDB registra um valor de espaço reservado de |
9 | Dados vetoriais, que são arrays densamente compactadas de números do mesmo tipo. |
128 | Dados personalizados |
Comportamento
As seções a seguir descrevem como converter valores em diferentes tipos.
Converter em BinData
A partir do MongoDB 8.1, você pode definir o campo to como binData se definir o campo input como um dos seguintes tipos:
intlongdouble
A partir do MongoDB 8.1, $convert retorna um erro ao tentar converter entre diferentes subtipos de binData. No MongoDB 8.0, $convert retorna o valor original e o subtipo original: nenhuma conversão é realizada. Versões do MongoDB anteriores a 8.0 não têm conversão binData.
Converter de tipos numéricos para binData:
Ao converter um tipo numérico para binData:
Um
intse torna um 4-bytebinData.Um
longse torna um 8-bytebinData.Um
doublese torna um 8-bytebinData.
O byteOrder da saída numérica padroniza para "little", ou a colocação do byte menos significativo primeiro. Em contraste, "big" coloca o byte mais significativo primeiro.
Converta long em binData:
Entrada:
db.t.insertOne( { a: Long(42) } )db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, }}])Saída:
[ { convertedBD: Binary.createFromBase64('KgAAAAAAAAA=', 0) }]Converta long em binData com ordenação de bytes big-endian:
Entrada:
db.t.insertOne( { a: Long(42) } )db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", byteOrder: "big", } }, } }])Saída:
[ { convertedBD: Binary.createFromBase64('AAAAAAAAACo=', 0), }]Converta double em binData:
Entrada:
db.t.insertOne( { a: Double(42.0) } )db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } }])Saída:
[ { convertedBD: Binary.createFromBase64('AAAAAAAARUA=', 0) }]Converta int em binData:
Entrada:
db.t.insertOne( { a: 42 } )db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } }])Saída:
[ { convertedBD: Binary.createFromBase64('KgAAAA==', 0) }]Converta uma array de valores numéricos para binData:
Este exemplo mostra como $convert converte arrays contendo diferentes tipos de valores numéricos em binData.
Entrada:
db.t.insertMany([ // Empty array { a: [ ] },
// Bool array { a: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] },
// Int array { a: [NumberInt(0), NumberInt(1), NumberInt(0), NumberInt(10)] }, // Double array { a: [ Double(0.0), Double(1.0), Double(0.0), Double(1.0), Double(3.14) ] },])db.t.aggregate([ { $project: { _id: 0, original: "$a", convertedVector: { $convert: { input: "$a", to: { type: "binData" } } } } }])Saída:
[ { original: [], convertedVector: Binary.fromPackedBits(new Uint8Array([])) }, { original: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ], convertedVector: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])) }, { original: [ 0, 1, 0, 10 ], convertedVector: Binary.fromInt8Array(new Int8Array([ 0, 1, 0, 10 ])) }, { original: [ 0, 1, 0, 1, 3.14 ], convertedVector: Binary.fromFloat32Array(new Float32Array([ 0, 1, 0, 1, 3.140000104904175 ])) }]Converta um objeto para binData
Novidades na versão 9.0.
Quando o campo input é resolvido para um objeto e o campo to é binData, $convert retorna a representação BSON bruta do objeto. O subtipo do valor binData retornado é 0, a menos que você especifique um valor diferente em to.subtype.
Como a saída é o BSON bruto do objeto, a ordem dos campos do objeto e a ordem dos elementos em seus array afetam os bytes retornados.
$convert valida os campos format, byteOrder e base para esta conversão, mas esses campos não têm efeito na saída.
A tabela a seguir mostra exemplos de conversão de objeto para binData:
Exemplo | Resultados |
|---|---|
| |
| |
| |
| A saída difere do exemplo anterior porque a ordem dos campos difere. |
| |
| A saída difere do exemplo anterior porque a ordem dos elementos do array é diferente. |
| |
|
|
| Error: Invalid 'format' argument for $convert: bson
|
| zero |
Converter de string para BinData
O MongoDB também suporta conversões entre binData e strings.
Os exemplos seguintes demonstram como converter strings em binData.
Exemplo | Resultado |
|---|---|
| |
| |
| |
| |
| |
| |
| |
Observação
A partir do MongoDB 8.1, $convert retorna um erro ao tentar converter entre diferentes subtipos de binData. No MongoDB 8.0, $convert retorna o valor original e o subtipo original: nenhuma conversão é realizada. Versões do MongoDB anteriores a 8.0 não têm conversão binData.
Converter em array
Novidades na versão 8.3.
A tabela a seguir lista os tipos de input que podem ser convertidos em uma array:
Tipo de entrada | Comportamento |
|---|---|
BinData | Retorna uma array de valores numéricos. O tipo numérico dos elementos de array depende do formato binData. |
String | Retorna uma array correspondente ao conteúdo dentro da string. A string deve conter caracteres que representam uma array JSON válida. |
Nulo ou Ausente | Retorna nulo. |
A tabela a seguir lista alguns exemplos de conversão de string para array:
Exemplo | Resultados |
|---|---|
| [ 1, 2, 3 ] |
| [ 'a', 'b', 'c' ] |
| [ ] |
| Erro: input não corresponde ao tipo esperado 'array' |
| Erro: conversão não suportada de int para array em $convert sem valor onError |
| Erro: o input não representa um JSON válido: valor autônomo inesperado |
| [ { '$oid': '507f1f77bcf86cd799439011' } ] |
| [ 1, 2, 3 ] |
| 'on error!' |
| 'on null!' |
Converter binData para Array
Este exemplo mostra como $convert converte binData de diferentes formatos em arrays contendo valores de seus respectivos tipos:
input:
db.t.insertMany([ // Empty PACKED_BIT vector converts to empty array { v: BinData(9, "EAA=") },
// PACKED_BIT vector converts to bool array { v: BinData(9, "EAB/Bw==") },
// INT8 vector converts to int array { v: BinData(9, "AwAAAQ==") },
// FLOAT32 vector converts to double array { v: BinData(9, "JwCamZk+") },
// FLOAT32 vector with special values converts to [-Infinity, 0, Infinity] { v: BinData(9, "JwAAAID/AAAAAAAAgH8=") }])db.t.aggregate([ { $project: { _id: 0, original: "$v", asArray: { $convert: { input: "$v", to: { type: "array" } } } } }])Saída:
[ { original: Binary.fromPackedBits(new Uint8Array([])), asArray: [] }, { original: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])), asArray: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, { original: Binary.fromInt8Array(new Int8Array([ 0, 1 ])), asArray: [ 0, 1 ] }, { original: Binary.fromFloat32Array(new Float32Array([ 0.30000001192092896 ])), asArray: [ 0.30000001192092896 ] }, { original: Binary.fromFloat32Array(new Float32Array([ -Infinity, 0, Infinity ])), asArray: [ -Infinity, 0, Infinity ] }]Converter em objeto
Novidades na versão 8.3.
A tabela a seguir lista os tipos de input que podem ser convertidos em um objeto:
Tipo de entrada | Comportamento |
|---|---|
String | Retorna um document correspondente ao conteúdo dentro da string. A string deve conter caracteres que representam um objeto JSON válido. |
Nulo ou Ausente | Retorna nulo. |
A tabela a seguir lista alguns exemplos de conversão para objeto :
Exemplo | Resultados |
|---|---|
| { a: 1, b: 2 } |
| { } |
| Erro: o input não corresponde ao tipo esperado "objeto" |
| Erro: o input não representa um JSON válido: valor autônomo inesperado |
| Erro: o input não representa um JSON válido: byte nulo incorporado ilegal |
| { name: 'fox00o' } |
| { a: 3, b: 2 } |
| {foo: null } |
| {foo: false } |
| { ['__proto__']: {foo: null } } |
| { foo: 'NaN' } |
| {foo: 123 } |
| {foo: Long('4294967296') } |
| {foo: 1.123123 } |
| {foo: 1200 } |
| { largePos: 18446744073709552000 } |
| { largeNeg: -18446744073709552000 } |
| zero |
| { |
converter para booleano
A tabela a seguir lista os tipos de entrada que podem ser convertidos em booleanos:
Tipo de entrada | Comportamento |
|---|---|
Array | Retorna verdadeiro |
Dados binários | Retorna verdadeiro |
Boolean | Sem operação. Retorna o valor booleano. |
Código | Retorna verdadeiro |
Data | Retorna verdadeiro |
Decimal | Returns true if not zero |
Double | Returns true if not zero |
Inteiro | Returns true if not zero |
JavaScript | Retorna verdadeiro |
Long | Returns true if not zero |
Tecla máxima | Retorna verdadeiro |
Chave mín. | Retorna verdadeiro |
Zero | Retorna o valor especificado para a opção |
Objeto | Retorna verdadeiro |
ObjectId | Retorna verdadeiro |
expressão regular | Retorna verdadeiro |
String | Retorna verdadeiro |
Timestamp | Retorna verdadeiro |
Para aprender mais sobre os tipos de dados no MongoDB, consulte MongoDB BSON Types.
A tabela a seguir lista alguns exemplos de conversão para booleana:
Exemplo | Resultados |
|---|---|
| true |
| false |
| true |
| true |
| false |
| true |
| true |
| true |
| true |
| true |
| zero |
converter para número inteiro
A tabela a seguir lista os tipos de entrada que podem ser convertidos para um número inteiro:
Tipo de entrada | Comportamento |
|---|---|
Boolean | Retorna |
BinData | Retorna o valor O número de bytes no valor Se o |
Double | Retorna valor truncado. O valor double truncado deve cair dentro do valor mínimo e máximo para um número inteiro. Você não pode converter um valor double cujo valor truncado é menor que o valor inteiro mínimo ou é maior que o valor inteiro máximo. |
Decimal | Retorna valor truncado. O valor decimal truncado deve cair dentro do valor mínimo e máximo para um número inteiro. Você não pode converter um valor decimal cujo valor truncado é menor que o valor inteiro mínimo ou é maior que o valor inteiro máximo. |
Inteiro | Nenhum oplog. Retorna o valor inteiro. |
Long | Retorna o valor longo como um número inteiro. O valor longo deve cair dentro do valor mínimo e máximo para um número inteiro. Você não pode converter um valor longo que seja menor que o valor inteiro mínimo ou maior que o valor inteiro máximo. |
String | Retorna o valor numérico da string como um número inteiro. Se você omitir Se você especificar |
A tabela a seguir lista alguns exemplos de conversão para número inteiro:
Exemplo | Resultados |
|---|---|
| 1 |
| 0 |
| 1 |
| 5 |
| Erro |
| 5.000 |
| Erro |
| -2 |
| Erro |
| zero |
| 1048576 |
| -1763180545 |
| Erro: falha ao converter BinData devido ao comprimento inválido: 7 |
converter para decimal
A tabela a seguir lista os tipos de entrada que podem ser convertidos em um número decimal:
Tipo de entrada | Comportamento |
|---|---|
Boolean | Retorna |
Double | Retorna o valor double como decimal. |
Decimal | Nenhum oplog. Retorna o decimal. |
Inteiro | Retorna o valor int como decimal. |
Long | Retorna o valor longo como decimal. |
String | Retorna o valor numérico da string como decimal. Se você omitir Se você especificar |
Data | Retorna o número de milissegundos desde a época que corresponde ao valor de data. |
A tabela a seguir lista alguns exemplos de conversão para decimal:
Exemplo | Resultados |
|---|---|
| Decimal128("1") |
| Decimal128("0") |
| Decimal128( "2,50000000000000" ) |
| Decimal128("5") |
| Decimal128("10.000") |
| Decimal128("-5,5") |
| Decimal128("1522039108044") |
converter para double
A tabela a seguir lista os tipos de entrada que podem ser convertidos em double:
Tipo de entrada | Comportamento |
|---|---|
Boolean | Retorna NumberDouble(0) para |
BinData | Retorna o valor O número de bytes no valor Se o |
Double | Nenhum oplog. Retorna o double. |
Decimal | Retorna o valor decimal como double. O valor decimal deve cair dentro do valor mínimo e máximo para um double. Você não pode converter um valor decimal cujo valor é menor que o double mínimo ou maior que o double máximo. |
Inteiro | Retorna o valor inteiro como double. |
Long | Retorna o valor longo como double. |
String | Retorna o valor numérico da string como double. Se você omitir Se você especificar |
Data | Retorna o número de milissegundos desde a época que corresponde ao valor de data. |
A tabela a seguir lista alguns exemplos de conversão em double:
Exemplo | Resultados |
|---|---|
| 1 |
| 0 |
| 2.5 |
| 5 |
| 10.000 |
| -5.5 |
| 50000000000 |
| 1522039108044 |
| 4.814824932714571e-36 |
| Erro: falha ao converter binData devido ao comprimento inválido: 2 |
Números subnormais
A partir do MongoDB 8.3, o servidor é capaz de analisar toda a faixa de todos os números de double de ponto flutuante de precisão representáveis. Isso inclui números subnormais em que o dígito mais significativo tem zeros à esquerda e o expoente tem o menor valor possível. Para obter detalhes, consulte Número subnormal.
Nas versões anteriores do MongoDB, o servidor retorna um erro quando você tenta analisar esses números. O exemplo a seguir gera um erro em versões anteriores ao MongoDB 8.3:
db.t.insertOne( { v: "7.08263e-317" } )
db.t.aggregate([ { $project: { converted: { $convert: { input: "$v", to: "double" }, } } }])Este exemplo falha com um erro semelhante ao seguinte:
MongoServerError[ConversionFailure]: Executor error during aggregate command on namespace: test.t ::caused by :: Failed to parse number '7.08263e-317' in $convert with no onError value: Out of rangeconverter para longo
A tabela a seguir lista os tipos de entrada que podem ser convertidos para um longo:
Tipo de entrada | Comportamento |
|---|---|
Boolean | Retorna |
BinData | Retorna o valor O número de bytes no valor Se o |
Double | Retorna valor truncado. O valor double truncado deve cair dentro do valor mínimo e máximo por um longo período. Você não pode converter um valor double cujo valor truncado é menor que o valor mínimo longo ou é maior que o valor máximo longo. |
Decimal | Retorna valor truncado. O valor decimal truncado deve cair dentro do valor mínimo e máximo por um longo período. Não é possível converter um valor decimal cujo valor truncado seja menor que o valor longo mínimo ou maior que o valor longo máximo. |
Inteiro | Retorna o valor int como um longo. |
Long | Sem operação. Retorna o valor longo. |
String | Retorna o valor numérico da string. Se você omitir Se você especificar |
Data | Converte a data para o número de milissegundos desde a época. |
A tabela a seguir lista alguns exemplos de conversão:
Exemplo | Resultados |
|---|---|
| Long("1") |
| Long("0") |
| Longo("2") |
| Long("5") |
| Erro |
| Long("8") |
| Long("1522039108044") |
| Long("-2") |
| Erro |
| zero |
| Long("1048576") |
converter em data
A tabela a seguir lista os tipos de entrada que podem ser convertidos em uma data:
Tipo de entrada | Comportamento |
|---|---|
Double | Retorna uma data que corresponde ao número de milissegundos representado pelo valor double truncado. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
Decimal | Retorna uma data que corresponde ao número de milissegundos representados pelo valor decimal truncado. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
Long | Retorna uma data que corresponde ao número de milissegundos representados pelo valor longo. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
String | Retorna uma data que corresponde à string de data. A string deve ser uma string de data válida, como:
|
ObjectId | Retorna uma data que corresponde ao carimbo de data/hora do ObjectId. |
Timestamp | Retorna uma data que corresponde ao carimbo de data/hora. |
A tabela a seguir lista alguns exemplos de conversão em data:
Exemplo | Resultados |
|---|---|
| ISODATE("1973-10-20T21:20:00,000Z") |
| ISODATE("2009-09-19T14:53:56,000Z") |
| ISODATE("2004-11-09T11:33:20,000Z") |
| ISODATE("1935-02-22T12:26:40,000Z") |
| ISODATE("2018-03-27T04:08:58,000Z") |
| ISODATE("2018-03-03T00:00:00,000Z") |
| ISODATE("2018-03-20T06:00:06,000Z") |
| Erro |
| ISODATE("2021-11-23T17:21:58,000Z") |
converter para ObjectId
A tabela a seguir lista os tipos de entrada que podem ser convertidos para um ObjectId:
Tipo de entrada | Comportamento |
|---|---|
String | Retorna um ObjectId para a string hexadecimal de comprimento 24. Não é possível converter um valor de string que não seja uma string hexadecimal de comprimento 24. |
A tabela a seguir lista alguns exemplos de conversão em data:
Exemplo | Resultados |
|---|---|
| ObjectId("5ab9cbfa31c2ab715d42129e") |
| Erro |
converter em string
A tabela a seguir lista os tipos de entrada que podem ser convertidos em uma string:
Tipo de entrada | Comportamento |
|---|---|
Array | Retorna o Novidades na versão 8.3. |
BinData | Se o |
Boolean | Retorna o valor booleano como uma string. |
Data | Retorna o |
Decimal | Retorna o valor |
Double | Retorna o valor |
Inteiro | Retorna o valor |
Long | Retorna o valor |
Tecla máxima | Retorna o Novidades na versão 8.3. |
Chave mín. | Retorna o Novidades na versão 8.3. |
Objeto | Retorna o objeto como uma string. Novidades na versão 8.3. |
ObjectId | Retorna o valor |
Expressão regular | Retorna o Novidades na versão 8.3. |
String | Nenhuma operação. Retorna o valor da string. |
Timestamp | Retorna o Novidades na versão 8.3. |
Observação
Quando você especifica base e o input é um tipo numérico, $convert retorna a representação de string do valor inteiro nessa base. A conversão de base para strings só é permitida para valores inteiros; caso contrário, $convert retorna um erro de conversão, a menos que você especifique onError.
A tabela a seguir lista alguns exemplos de conversão para string:
Exemplo | Resultados |
|---|---|
| "verdadeiro" |
| "falso" |
| "2,5" |
| "2" |
| "1.000" |
| "5ab9c3da31c2ab715d421285" |
| "2018-03-27T16:58:51.538Z" |
| 'hn3f' |
| "inválido" |
Exemplos
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Exemplo de conversão de base
As strings hexadecimais são uma forma compacta de representar números inteiros, e muitos sistemas trocam identificadores como valores hexadecimais. O exemplo a seguir converte o imdb.id numérico de cada filme em uma string hexadecimal:
db.movies.aggregate( [ { $match: { title: { $in: [ "The Godfather", "Toy Story", "Metropolis" ] } } }, { $sort: { title: 1 } }, { $project: { _id: 0, title: 1, imdbId: "$imdb.id", hexId: { $convert: { input: "$imdb.id", to: "string", base: 16 } } } }] )[ { title: 'Metropolis', imdbId: 293416, hexId: '47A28' }, { title: 'The Godfather', imdbId: 68646, hexId: '10C26' }, { title: 'Toy Story', imdbId: 114709, hexId: '1C015' }]Para converter uma string hexadecimal de volta para um número inteiro, passe a string para $convert com base: 16 e to: "int".
Exemplo de conversão de tipo
A seguinte operação de agregação converte o campo imdb.rating, que é um double na maioria dos documento, mas uma string vazia em outros, para um double. Ele também converte o campo metacritic, que está ausente em alguns documento, para um inteiro. O estágio $match seleciona três filmes que ilustram cada resultado de conversão:
db.movies.aggregate( [ { $match: { title: { $in: [ "The Danish Girl", "The Godfather", "Gertie the Dinosaur" ] } } }, { $project: { _id: 0, title: 1, rating: { $convert: { input: "$imdb.rating", to: "double", onError: "Error", onNull: 0 } }, metacritic: { $convert: { input: "$metacritic", to: "int", onError: "Error", onNull: 0 } } } }, { $sort: { title: 1 } }] )[ { title: 'Gertie the Dinosaur', rating: 7.3, metacritic: 0 }, { title: 'The Danish Girl', rating: 'Error', metacritic: 0 }, { title: 'The Godfather', rating: 9.2, metacritic: 100 }]Para The Danish Girl, a string vazia em imdb.rating não pode ser convertida em um double, portanto onError retorna "Error". Para Gertie the Dinosaur e The Danish Girl, metacritic está ausente, portanto onNull retorna 0.
Saiba mais
Converta um valor para uma array com
$toArrayConverta uma string em um objeto com
$toObjectConverta um valor em booleano com
$toBoolConverta um valor em um número inteiro com
$toIntConverta um valor para um decimal com
$toDecimalConverta um valor em um double com
$toDoubleConverta um valor em um longo com
$toLongConverta um valor para uma data com
$toDateConverter um valor para um ObjectId com
$toObjectIdConverta um valor em uma string com
$toStringConverta uma string de data em um objeto de data com
$dateFromStringConverta um objeto de data em uma string com
$dateToString