|
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"}.
|