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

        Issue Links

          Activity

          Hide
          xgen-internal-githook Githook User added a comment -

          Author:

          {u'username': u'sindbach', u'name': u'Wan Bachtiar', u'email': u'sindbach@gmail.com'}

          Message: SERVER-23310 Add aggregation expression $arrayToObject

          Signed-off-by: Tess Avitabile <tess.avitabile@mongodb.com>
          Branch: master
          https://github.com/mongodb/mongo/commit/5b8b1ca6364342d5a1bf21ec6c707edfae0f3555

          Show
          xgen-internal-githook Githook User added a comment - Author: {u'username': u'sindbach', u'name': u'Wan Bachtiar', u'email': u'sindbach@gmail.com'} Message: SERVER-23310 Add aggregation expression $arrayToObject Signed-off-by: Tess Avitabile <tess.avitabile@mongodb.com> Branch: master https://github.com/mongodb/mongo/commit/5b8b1ca6364342d5a1bf21ec6c707edfae0f3555
          Hide
          xgen-internal-githook Githook User added a comment -

          Author:

          {u'username': u'sindbach', u'name': u'Wan Bachtiar', u'email': u'sindbach@gmail.com'}

          Message: SERVER-23310 Add aggregation expression $arrayToObject

          Signed-off-by: Tess Avitabile <tess.avitabile@mongodb.com>
          (cherry picked from commit 5b8b1ca6364342d5a1bf21ec6c707edfae0f3555)
          Branch: v3.4
          https://github.com/mongodb/mongo/commit/e3ecb183d761c9e85ee2c6838e19a39f4af8fb40

          Show
          xgen-internal-githook Githook User added a comment - Author: {u'username': u'sindbach', u'name': u'Wan Bachtiar', u'email': u'sindbach@gmail.com'} Message: SERVER-23310 Add aggregation expression $arrayToObject Signed-off-by: Tess Avitabile <tess.avitabile@mongodb.com> (cherry picked from commit 5b8b1ca6364342d5a1bf21ec6c707edfae0f3555) Branch: v3.4 https://github.com/mongodb/mongo/commit/e3ecb183d761c9e85ee2c6838e19a39f4af8fb40

            People

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

              Dates

              • Created:
                Updated:
                Resolved:

                  Agile