Definition
- $arrayToObject
- New in version 3.4.4. - Converts an array into a single document; the array must be either: - An array of two-element arrays where the first element is the field name, and the second element is the field value: - [ [ [ "item", "abc123" ], [ "qty", 25 ] ] ] 
 - - OR - - An array of documents that contains two fields, - kand- vwhere:- The - kfield contains the field name.
- The - vfield contains the value of the field.
 - [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ] 
 - $arrayToObjecthas the following syntax:- { $arrayToObject: <expression> } - The - <expression>can be any valid expression that resolves to an array of two-element arrays or array of documents that contains "k" and "v" fields.- For more information on expressions, see Expressions. 
Behavior
If the name of a field repeats in the array,
- Starting in 4.0.5, - $arrayToObjectuses the last value for that field. For 4.0.0-4.0.4, the value used depends on the driver.
- Starting in 3.6.10, - $arrayToObjectuses the last value for that field. For 3.6.0-3.6.9, the value used depends on the driver.
- Starting in 3.4.19, - $arrayToObjectuses the last value for that field. For 3.4.0-3.4.19, the value uses depends on the driver.
| Example | Results | |||||
|---|---|---|---|---|---|---|
|  | Given a document with the field   | |||||
|  |  | |||||
|  | Starting in versions 4.0.5+ (3.6.10+ and 3.4.19+), if the name
of a field repeats in the array,  | 
Examples
$arrayToObject  Example
Consider a inventory collection with the following documents:
{ "_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 ] ] } 
The following aggregation pipeline operation use the
$arrayToObject to return the dimensions field as a
document:
db.inventory.aggregate(    [       {          $project: {             item: 1,             dimensions: { $arrayToObject: "$dimensions" }          }       }    ] ) 
The operation returns the following:
{ "_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 } } 
Starting in versions 4.0.5+ (3.6.10+ and 3.4.19+), if the name of a
field repeats in the array, $arrayToObject uses the last
value for that field.
$objectToArray + $arrayToObject Example
Consider a inventory collection with the following documents:
{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } } { "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} } 
The following aggregation pipeline operation calculates the total in
stock for each item and adds to the instock document:
db.inventory.aggregate( [    { $addFields: { instock: { $objectToArray: "$instock" } } },    { $addFields: { instock: { $concatArrays: [ "$instock", [ { "k": "total", "v": { $sum: "$instock.v" } } ] ] } } } ,    { $addFields: { instock: { $arrayToObject: "$instock" } } } ] ) 
The operation returns the following:
{ "_id" : 1, "item" : "ABC1", "instock" : { "warehouse1" : 2500, "warehouse2" : 500, "total" : 3000 } } { "_id" : 2, "item" : "ABC2", "instock" : { "warehouse2" : 500, "warehouse3" : 200, "total" : 700 } }