Definição
- $arrayToObject
- Converte uma array em um único documento. - $arrayToObjecttem a seguinte sintaxe:- { $arrayToObject: <expression> } - O - <expression>pode ser qualquerexpressão válida que se resolva para:- Uma array de arrays de dois elementos onde o primeiro elemento é o nome do campo e o segundo elemento é o valor do campo: - $arrayToObject: [ - [ [ "item", "abc123" ], [ "qty", 25 ] ] - ] 
 - - OU - - Uma array de documentos que contém dois campos, - ke- v, onde:- O campo - kcontém o nome do campo.
- O campo - vcontém o valor do campo.
 - $arrayToObject: [ - [ - { "k": "item", "v": "abc123" }, - { "k": "qty", "v": 25 } - ] - ] 
 
Comportamento
Se você passar uma array vazia para $arrayToObject, o MongoDB criará um objeto vazio.
Se o nome de um campo se repetir na array,
- A partir de 4.0.5, - $arrayToObjectutiliza o último valor para este campo. Para 4.0.0-4.0.4, o valor utilizado depende do condutor.
- A partir de 3.6.10, - $arrayToObjectutiliza o último valor para este campo. Para 3.6.0-3.6.9, o valor utilizado depende do driver.
- A partir de 3.4.19, - $arrayToObjectutiliza o último valor para este campo. Para 3.4.0-3.4.19, o valor utilizado depende do driver.
| Exemplo | Resultados | |||||
|---|---|---|---|---|---|---|
|  | Dado um documento com o campo   | |||||
|  |  | |||||
|  | A partir das versões 4.0.5+ (3.6.10+ e 3.4.19+), se o nome de um campo se repetir na array, usará o último valor desse | 
Exemplos
$arrayToObject  Exemplo
Considere uma collection inventory com os seguintes documentos:
db.inventory.insertMany( [    { _id: 1, item: "ABC1",  dimensions: [ { "k": "l", "v": 25} , { "k": "w", "v": 10 }, { "k": "uom", "v": "cm" } ] },    { _id: 2, item: "ABC2",  dimensions: [ [ "l", 50 ], [ "w",  25 ], [ "uom", "cm" ] ] },    { _id: 3, item: "ABC3",  dimensions: [ [ "l", 25 ], [ "l",  "cm" ], [ "l", 50 ] ] } ] ) 
A seguinte operação de pipeline de agregação utiliza o $arrayToObject para retornar o campo dimensions como um documento:
db.inventory.aggregate(    [       {          $project: {             item: 1,             dimensions: { $arrayToObject: "$dimensions" }          }       }    ] ) 
A operação retorna o seguinte:
{ _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: "ABC3", dimensions: { "l" : 50 } } 
Começando nas versões 4.0.5+ (3.6.10+ e 3.4.19+), se o nome de um campo se repetir na array, $arrayToObject usará o último valor desse campo.
$objectToArray + $arrayToObject exemplo
Considere uma collection inventory com os seguintes documentos:
db.inventory.insertMany( [    { _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 } }