Этого можно добиться с помощью $ facet & $ setUnion , попробуйте следующий запрос:
db.collection.aggregate([
{
$facet: {
"upstream": [{ $group: { _id: { AppName: '$upstreamAppName', AppID: '$upstreamAppID' } } }, { $group: { _id: '', upstreamArr: { $push: '$$ROOT._id' } } }],
"downstream": [{ $group: { _id: { AppName: '$downstreamAppName', AppID: '$downstreamAppID' } } }, { $group: { _id: '', downstreamArr: { $push: '$$ROOT._id' } } }]
}
}, { $unwind: '$upstream' }, { $unwind: '$downstream' }, { $project: { unionOfStreams: { $setUnion: ['$upstream.upstreamArr', '$downstream.downstreamArr'] } } }])
Тест: MongoDB-Playground
Примечание: Дополнительно вы можете добавить {$project : {_id :0, upstreamAppName:1,upstreamAppID:1 }},
& {$project : {_id :0, downstreamAppName:1,downstreamAppID:1 }}
перед соответствующими этапами $group
для оптимизированного запроса.