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

$toObject (operador de expresión)

$toObject

Convierte una cadena en un objeto. Si el valor no se puede convertir, se produce un error ( $toObject). Si el valor es (null) o no está presente, se devuelve ( $toObject) null.

$toObject tiene la siguiente sintaxis:

{
$toObject: <expression>
}

$toObject takes any valid expresión.

$toObject es una forma abreviada de la siguiente expresión:$convert

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

La siguiente tabla describe el comportamiento de $toObject para diferentes tipos de entrada:

Tipo de entrada
Comportamiento

String

Devuelve un documento que corresponde al contenido de la cadena.

La cadena debe contener caracteres que representen un objeto JSON válido.

Nulo o faltante

Devuelve nulo.

Al convertir una cadena en un objeto, $toObject:

  • Requiere sintaxis JSON válida. No se permiten comentarios ni comas al final.

  • Requiere que el valor de nivel superior sea un objeto. Si la cadena no representa un objeto, se produce un error $toObject.

  • No interpreta los envoltorios de tipo JSON extendido como $oid, $date o Timestamp(...). Estos permanecen como cadenas u objetos anidados en el resultado.

  • Conserva el último valor cuando el objeto contiene nombres de campo duplicados. Los valores anteriores para el mismo campo se descartan.

$toObject Convierte tipos numéricos en función de su valor y formato:

  • Los enteros dentro del rango con signo de 32bits se convierten en int.

  • Los enteros que están fuera del rango de bits 32pero dentro del rango con signo de bits 64se convierten en long.

  • Los enteros fuera del rango con signo de 64bits se convierten en double, lo que puede resultar en una pérdida de precisión.

  • Los números con punto decimal o notación exponencial se convierten en double.

La siguiente tabla muestra ejemplos del uso de $toObject para convertir cadenas en objetos:

Ejemplo
Resultados

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

{ a: 1, b: 2 }

$toObject: "{}"

{ }

$toObject: "[]"

Error: La entrada no coincide con el tipo esperado 'object'.

$toObject: "123"

Error: La entrada no representa un JSON válido: Valor independiente inesperado

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

Error: La entrada no representa un JSON válido: Byte nulo incrustado ilegal

Nota

La cadena debe contener caracteres que representen un objeto válido.

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

{ nombre: 'fox00o' }

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

{ a: 3, b: 2 }

Nota

Se conserva el último valor del mismo campo.

$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') }

Nota

El número está fuera del rango con signo de 32bits, por lo que se convierte a un número largo.

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

{ foo: 1.123123 }

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

{ foo: 1200 }

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

{ largePos: 18446744073709552000 }

Nota

El número está fuera del rango con signo de 64bits, por lo que se convierte a un double con pérdida de precisión.

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

{ largeNeg: -18446744073709552000 }

Nota

El número está fuera del rango con signo de 64bits, por lo que se convierte a un double con pérdida de precisión.

$toObject: null

Nulo

Crea una colección con cadenas almacenadas en un campo:

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

La siguiente agregación convierte la cadena en config en un objeto:

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

Esta operación devuelve un documento donde parsedConfig es un documento anidado con un valor booleano y un valor entero:

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

Nota

Si la operación de conversión encuentra un error, la operación de agregación se detiene y genera un error. Para anular este comportamiento, use $convert en su lugar.

Volver

$toLong

En esta página