如何将多个构面结果合并到具有一个属性的对象列表中

时间:2019-11-11 16:30:25

标签: mongodb aggregation-framework

情况:

在我的mongodb聚合管道中,我有一个$facet阶段,它会产生多个 输出字段,例如:pipe_1pipe_2

结果具有以下形式:

{
  pipe_1: [{"key": "a"}, {"key": "b"}, {"key": "c"}, {"key": "d"}],
  pipe_2: [{"key": "a"}, {"key": "B"}, {"key": "d"}]
}

想要的结果

我的问题是,现在如何从中获得以下结果:

[
  {"key": "a"},
  {"key": "d"}
]

我只想要两个列表中都没有重复的键 结果。最好我想在没有任何缓慢小组讨论的情况下给出答案,并且 它必须适用于两个以上的列表。

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用$setIntersection运算符:

db.collection.aggregate([
    {
        $project: {
            result: {
                $setIntersection: [ "$pipe_1", "$pipe_2" ]
            }
        }
    }
])

Mongo Playground