-
Type:
New Feature
-
Resolution: Done
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
None
-
Fully Compatible
-
v3.4
-
Query 2017-03-27
-
None
-
None
-
None
-
None
-
None
-
None
-
None
In many cases, it would be useful to construct an object from an array of key/value pairs. The new expression should be designed to work with the expression requested in SERVER-18794. For example, we could add an $arrayToObject expression, which could do the following:
db.foo.drop();
db.foo.insert({
myArray: [ ["price", 200], ["item", "mango"] ],
document: {x: 1, y: 2, z: 2},
docs: [
{email: "charlie", count: 4, blah: "foo"},
{email: "eliot", count: 500, blah: "bar"},
]
});
db.foo.aggregate([{
$project: {
convertedFrom2dArray: {$arrayToObject: "$myArray"},
noOp: {$arrayToObject: {$objectToArray: "$document"}},
aggregated: {$arrayToObject: {$zip: ["$docs.email",
"$docs.count"]}}}
}
}]);
// Output:
{
_id: xxx,
convertedFrom2dArray: {"price": 200, "item": "mango"},
noOp: {x: 1, y: 2, z: 2},
aggregated: {charlie: 4, eliot: 500},
}
The expression should accept an array of pairs either represented as
- an array of two-element arrays (like [ ["price", 200], ["item", "mango"] ] above), or
- an array of two-field objects with key names k and v.
In the latter case, the expression would permit conversion of [{k: "price", v: 200}, {k: "item", v: "mango"}] to {price: 200, item: "mango"}.
- is depended on by
-
CSHARP-1940 Add an expression to convert an array of pairs to an object
-
- Closed
-
- is duplicated by
-
SERVER-5947 Add ability to project key names as values and values as key names
-
- Closed
-
-
SERVER-23729 Crafting subdocuments with the aggregation framework
-
- Closed
-
- related to
-
DRIVERS-358 Aggregation Framework Support for 3.6
-
- Closed
-
-
SERVER-18794 Add an aggregation expression to convert an object to an array of key, value pairs
-
- Closed
-
- links to