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

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

    • Type: Icon: New Feature New Feature
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 3.4.4, 3.5.5
    • Affects Version/s: None
    • Component/s: Aggregation Framework
    • Labels:
      None
    • Fully Compatible
    • v3.4
    • Query 2017-03-27

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

            Assignee:
            tess.avitabile@mongodb.com Tess Avitabile (Inactive)
            Reporter:
            charlie.swanson@mongodb.com Charlie Swanson
            Votes:
            6 Vote for this issue
            Watchers:
            14 Start watching this issue

              Created:
              Updated:
              Resolved: