Definición
$objectToArrayNuevo en la versión 3.4.4.
Convierte un documento en una matriz. La matriz de retorno contiene un elemento por cada par campo-valor del documento original. Cada elemento de la matriz de retorno es un documento que contiene dos campos
kyv:El campo
kcontiene el nombre del campo en el documento original.El campo
vcontiene el valor del campo en el documento original.
$objectToArraytiene la siguiente sintaxis:{ $objectToArray: <object> } La expresión
<object>puede ser cualquier valor válido. Expresión siempre que se resuelva en un objeto de documento. se aplica a los campos de nivel superior de su$objectToArray$objectToArrayargumento. Si el argumento es un documento que contiene campos de documento incrustados, no se aplica recursivamente a los campos de documento incrustados.Para obtener más información sobre las expresiones, consulta Expresiones.
Comportamiento
Para obtener más información sobre las expresiones, consulta Expresiones.
Ejemplo | Resultados | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | |||||||||||||||||||||||
| |
Ejemplos
$objectToArray Ejemplo
Considera una colección inventory con los siguientes documentos:
{ "_id" : 1, "item" : "ABC1", dimensions: { l: 25, w: 10, uom: "cm" } } { "_id" : 2, "item" : "ABC2", dimensions: { l: 50, w: 25, uom: "cm" } } { "_id" : 3, "item" : "XYZ1", dimensions: { l: 70, w: 75, uom: "cm" } }
La siguiente operación de canalización de agregación utiliza para devolver $objectToArray el dimensions campo como una matriz:
db.inventory.aggregate( [ { $project: { item: 1, dimensions: { $objectToArray: "$dimensions" } } } ] )
La operación devuelve lo siguiente:
{ "_id" : 1, "item" : "ABC1", "dimensions" : [ { "k" : "l", "v" : 25 }, { "k" : "w", "v" : 10 }, { "k" : "uom", "v" : "cm" } ] } { "_id" : 2, "item" : "ABC2", "dimensions" : [ { "k" : "l", "v" : 50 }, { "k" : "w", "v" : 25 }, { "k" : "uom", "v" : "cm" } ] } { "_id" : 3, "item" : "XYZ1", "dimensions" : [ { "k" : "l", "v" : 70 }, { "k" : "w", "v" : 75 }, { "k" : "uom", "v" : "cm" } ] }
$objectToArray para Sumar Campos Anidados
Considera una colección inventory con los siguientes documentos:
{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } } { "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} }
La siguiente operación de canalización de agregación utiliza $objectToArray junto con $unwind y para calcular el total de artículos en stock por $group almacén.
db.inventory.aggregate([ { $project: { warehouses: { $objectToArray: "$instock" } } }, { $unwind: "$warehouses" }, { $group: { _id: "$warehouses.k", total: { $sum: "$warehouses.v" } } } ])
La operación devuelve lo siguiente:
{ "_id" : "warehouse3", "total" : 200 } { "_id" : "warehouse2", "total" : 1000 } { "_id" : "warehouse1", "total" : 2500 }
$objectToArray + $arrayToObject Ejemplo
Considera una colección inventory con los siguientes documentos:
{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } } { "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} }
La siguiente operación de canalización de agregación calcula el total en stock para cada artículo y lo agrega al documento instock:
db.inventory.aggregate( [ { $addFields: { instock: { $objectToArray: "$instock" } } }, { $addFields: { instock: { $concatArrays: [ "$instock", [ { "k": "total", "v": { $sum: "$instock.v" } } ] ] } } } , { $addFields: { instock: { $arrayToObject: "$instock" } } } ] )
La operación devuelve lo siguiente:
{ "_id" : 1, "item" : "ABC1", "instock" : { "warehouse1" : 2500, "warehouse2" : 500, "total" : 3000 } } { "_id" : 2, "item" : "ABC2", "instock" : { "warehouse2" : 500, "warehouse3" : 200, "total" : 700 } }