MongoDB聚合一次运行两个组操作

时间:2016-07-14 07:06:42

标签: mongodb mongodb-aggregation

假设:

我有一些列的集合,其中两个列我希望得到所有使用的值

目前我正在进行两项汇总,如下(简化)

db['myCollection'].aggregate(
  [{$group: {"_id":"$firstCol"}}  ]
);

db['myCollection'].aggregate(
  [{$group: {"_id":"$secondCol"}}  ]
);

但是,运行两个聚合会浪费资源。有没有办法同时获得两个分组结果?

我考虑过将它们组合起来,然后将其拆分为代码。

1 个答案:

答案 0 :(得分:1)

你可以借助$addToSet运算符

这样做
db['myCollection'].aggregate([
    {
        $group: {
            _id: null,
            col1: {
                $addToSet: "$firstCol"
            },
            col2: {
                $addToSet: "$secondCol"
            }
        }
    }
])

如果您在目标字段上有索引,那么我会选择使用distinct的单独调用,因为这可以利用这些,并可能导致更少的工作量/更快的执行时间。

db[myCollection].distinct('firstCol')