如何从mongoDB aggregate()查询中返回多个结果?

时间:2015-05-26 21:02:28

标签: mongodb performance mongodb-query aggregation-framework

这是一个运行匹配的查询,然后返回特定字段中唯一条目的数量:

db.sequences.aggregate([{$match: {id: 5}}, {$group : {_id : "$field"} }, {$group: {_id:1, count: {$sum : 1 }}}])

但是,如果我想返回多个值,例如原始匹配聚合中的所有文档的计数,原始匹配中的前50个文档,以及相同的字段2的唯一条目数,该怎么办?匹配的文件集?

我是否可以编写1个返回所有这些值的聚合查询?

1 个答案:

答案 0 :(得分:3)

您需要执行两个单独的$group阶段。首先$group字段filed,然后$push将结果文档放入数组中,同时从每个文档中累积count,以获得总和。< / p>

db.sequences.aggregate(
   [
      {$match: {id: 5}}, 
      {$group : 
         {
            _id : "$field", 
            count: {$sum: 1}
         }
      },
      {$group : 
         {
            _id : null, 
            totalNumberOfMatches: {$sum: '$count'},
            totalNumberOfUniqueMatches: {$sum: 1},
            uniqueMatchesField:
               {
                  $push:
                     {
                        field: '$_id',
                        count: '$count'
                     }
               }
         }
      },
   ]
)