【问题标题】:How to get the count of multiple queries on one collection in only one query?如何仅在一个查询中获取对一个集合的多个查询的计数?
【发布时间】:2015-12-16 10:08:13
【问题描述】:

我有一个名为 Student 的集合。
文档有一个字段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();

并显示。

有没有一种方法可以在单个查询中完成?

【问题讨论】:

标签: mongodb meteor mongodb-query aggregation-framework


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您已经在本地拥有所有数据,则可以使用聚合来完成,或者使用 mongo(如 Volodymyr 指出的)或下划线/lodash 的 countBy 方法。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-12
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      相关资源
      最近更新 更多