如何只在一个查询中获取一个集合上的多个查询的计数?

时间:2015-12-16 10:08:14

标签: mongodb meteor mongodb-query aggregation-framework

我有一个名为Students的系列 文档的字段house包含字符串值,例如:
'Gryffindor''Hufflepuff''Ravenclaw''Slytherin'

我正在显示每个房子里的学生人数。

为此,我正在做这样的事情:

G = Students.find({ house: 'Gryffindor' }).count();
H = Students.find({ house: 'Hufflepuff' }).count();
R = Students.find({ house: 'Ravenclaw' }).count();
S = Students.find({ house: 'Slytherin' }).count();

并显示。

有没有办法可以在一个查询中完成?

2 个答案:

答案 0 :(得分:3)

您可以使用mongo aggregation在单个查询中执行此操作。

Students.aggregate([
    { 
        $group : {
            _id : "$house",
            count: { $sum: 1 }
        }
    }
])

答案 1 :(得分:0)

如果你已经在本地获得了所有数据,你可以使用聚合来做到这一点,使用mongo(如Volodymyr指出)或下划线/ lodash&#39s的countBy方法。

在服务器中它始终有效,因为所有数据始终存在,但为了使其在客户端上工作(显示实际计数),您应该发布所有用户,这可能不是最佳实践,甚至大型应用程序也不可能。

在这种情况下,您应该使用一种方法(将返回非反应计数),创建单独的计数集合并使其保持最新,甚至使用低级别流星发布API来发布反应计数