[CSHARP-1940] Add an expression to convert an array of pairs to an object Created: 13/Mar/17  Updated: 13/Apr/22

Status: Backlog
Project: C# Driver
Component/s: API
Affects Version/s: None
Fix Version/s: None

Type: New Feature Priority: Major - P3
Reporter: Rathi Gnanasekaran Assignee: Unassigned
Resolution: Unresolved Votes: 1
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
depends on SERVER-23310 Add an expression to convert an array... Closed
is depended on by DRIVERS-358 Aggregation Framework Support for 3.6 Closed
Epic Link: Aggregation
Server Compat: 3.4, 3.5

 Description   

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

  1. an array of two-element arrays (like [ ["price", 200], ["item", "mango"] ] above), or
  2. 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"}.


Generated at Wed Feb 07 21:41:08 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.