Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$objectToArray (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$objectToArray

Converte um documento em uma array. A array de devolução contém um elemento para cada par de campo/valor no documento original. Cada elemento na array de devolução é um documento que contém dois campos k e v:

  • O campo k contém o nome do campo no documento original.

  • O campo v contém o valor do campo no documento original.

$objectToArray tem a seguinte sintaxe:

{ $objectToArray: <object> }

A expressão <object> pode ser qualquerexpressão válida, desde que se resolva em um objeto de documento. $objectToArray se aplica aos campos de nível superior do seu argumento. Se o argumento for um documento que contém campos de documento incorporado, $objectToArray não se aplica recursivamente aos campos de documento incorporado.

Para mais informações sobre expressões, consulte Expressões.

Para mais informações sobre expressões, consulte Expressões.

Exemplo
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"
}
}
]

Considere uma collection inventory com os seguintes 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" } }

A operação de pipeline de agregação a seguir usa $objectToArray para retornar o campo dimensions como array:

db.inventory.aggregate(
[
{
$project: {
item: 1,
dimensions: { $objectToArray: "$dimensions" }
}
}
]
)

A operação retorna o seguinte:

{ "_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" } ] }

Considere uma collection inventory com os seguintes documentos:

{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } }
{ "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} }

A operação de pipeline de agregação a seguir usa $objectToArray junto com $unwind e $group para calcular o total de itens em estoque por armazém.

db.inventory.aggregate([
{ $project: { warehouses: { $objectToArray: "$instock" } } },
{ $unwind: "$warehouses" },
{ $group: { _id: "$warehouses.k", total: { $sum: "$warehouses.v" } } }
])

A operação retorna o seguinte:

{ "_id" : "warehouse3", "total" : 200 }
{ "_id" : "warehouse2", "total" : 1000 }
{ "_id" : "warehouse1", "total" : 2500 }

Considere uma collection inventory com os seguintes documentos:

{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } }
{ "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} }

A seguinte operação de aggregation pipeline calcula o total em estoque para cada item e adiciona ao documento instock:

db.inventory.aggregate( [
{ $addFields: { instock: { $objectToArray: "$instock" } } },
{ $addFields: { instock: { $concatArrays: [ "$instock", [ { "k": "total", "v": { $sum: "$instock.v" } } ] ] } } } ,
{ $addFields: { instock: { $arrayToObject: "$instock" } } }
] )

A operação retorna o seguinte:

{ "_id" : 1, "item" : "ABC1", "instock" : { "warehouse1" : 2500, "warehouse2" : 500, "total" : 3000 } }
{ "_id" : 2, "item" : "ABC2", "instock" : { "warehouse2" : 500, "warehouse3" : 200, "total" : 700 } }

Dica

Veja também:

← $not (agregação)