Mongo DB-聚合中两组字段的并集

时间:2020-02-04 21:23:50

标签: mongodb mongodb-query

我有一个对象数据库,其结构有点类似于以下内容:

{
    "processID": value,
    "upstreamAppName": Name,
    "upstreamAppID": ID,
    "downstreamAppName": Name,
    "downstreamAppID": ID
}

我想基于名称和ID将所有应用分组,无论是上游还是下游。我想通过对{ "$upstreamAppName", "$upstreamAppID" }的所有唯一组合进行分组,对{ "$downstreamAppName", "$downstreamAppID" }的所有唯一组合进行分组,然后获得这两个集合的并集来完成此操作。有人告诉我可以用来完成此操作的查询吗?

1 个答案:

答案 0 :(得分:1)

您可以使用$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,以优化查询。