Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$objectToArray (agregación)

$objectToArray

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 k y v:

  • El campo k contiene el nombre del campo en el documento original.

  • El campo v contiene el valor del campo en el documento original.

$objectToArray tiene 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 $objectToArray argumento. 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.

Para obtener más información sobre las expresiones, consulta Expresiones.

Ejemplo
Resultados
{ $objectToArray: { item: "foo", qty: 25 } }
[
{
"k" : "item",
"v" : "foo"
},
{
"k" : "qty",
"v" : 25
}
]
{ $objectToArray: {
item: "foo",
qty: 25,
size: { len: 25, w: 10, uom: "cm" }
} }
[
{
"k" : "item",
"v" : "foo"
},
{
"k" : "qty",
"v" : 25
},
{
"k" : "size",
"v" : {
"len" : 25,
"w" : 10,
"uom" : "cm"
}
}
]

Considera una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _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" } ] }

Considera una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _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 }

Considera una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _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 } }

Tip

Volver

$not

En esta página