marcos
marcos

Reputation: 23

mongodb - Get one array from two arrays in collection

In my mongodb collection, I have sometimes two, sometimes one and sometimes null arrays on a document. Now I'd like to get one array over the whole collection with the values of these arrays.

The document looks like this:

{
    "title" : "myDocument",
    "listOne" : [ 
        "valueOne", 
        "valueTwo"
    ],
    "listTwo" : [ 
        "abc", 
        "qwer"
    ]
},
{
    "title" : "myDocumentTwo",
    "listTwo" : [  
        "321"
    ]
},
{
    "title" : "myDocumentAlpha",
    "listOne" : [ 
        "alpha", 
        "beta"
    ]
},
{
    "title" : "myDocumentbeta"
}

And I expect the following output:

"combinedList" : [
    "valueOne", 
    "valueTwo",
    "abc",
    "qwer",
    "321",
    "alpha",
    "beta"
]

It's like every possible value from these twos array out of every document in this collection.

Upvotes: 2

Views: 31

Answers (1)

palaѕн
palaѕн

Reputation: 73906

You can do this using aggregate and $concatArrays

db.collection.aggregate([
  {
    $project: {
      combinedList: {
        $concatArrays: [{$ifNull: ["$listOne", []]}, {$ifNull: ["$listTwo", []]}]
      }
    }
  },
  { $unwind: "$combinedList" },
  { $group: { _id: null, combinedList: { $addToSet: "$combinedList"}}},
  { $project: { _id: 0, combinedList: 1 }}
])

Upvotes: 2

Related Questions