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

Add an aggregation expression to convert an object to an array of key, value pairs

    Details

    • Backwards Compatibility:
      Fully Compatible
    • Backport Requested:
      v3.4
    • Sprint:
      Query 2017-03-06
    • Case:

      CRM plugin field not viewable

      Description

      In many cases, it would be useful to convert an object to an array. We should add an aggregation expression to do so. For example, it could be called $objectToArray, and do something like this:

      > db.foo.insert({_id: 0, subDoc: {a: 1, b: 3, c: "example"}});
      > db.foo.aggregate([{$project: {expanded: {$objectToArray: "$subDoc"}}}])
      {_id: 0, expanded: [{k: "a", v: 1}, {k: "b", v: 3}, {k: "c", v: "example"}]}
      

      Original Description

      Currently, if a collection contains the following document:

      {_id: 0, data: {a: 1, b: 2, c: 3}}
      

      There is no way to unwind that one document into the following three documents:

      {_id: 0, data: {a: 1}}
      {_id: 0, data: {b: 2}}
      {_id: 0, data: {c: 3}}
      

      One way to accomplish this would be to add a stage to unwind documents, e.g.

      db.coll.aggregate([{$objectToArray: {field: '$data'}}])
      

      Which would yield the following document, which could then be unwound to produce the desired result:

      {_id: 0, data: [{a: 1}, {b: 2}, {c: 3}]}
      

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: