Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-23310

Add an expression to convert an array of pairs to an object

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.4.4, 3.5.5
    • Component/s: Aggregation Framework
    • Labels:
      None
    • Backwards Compatibility:
      Fully Compatible
    • Backport Requested:
      v3.4
    • Sprint:
      Query 2017-03-27

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

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                6 Vote for this issue
                Watchers:
                15 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: