【问题标题】:MongoDB+Aggregation: effective way to 1) get results by a query 2) make analytics via aggregation on same resultsMongoDB+聚合:1)通过查询获取结果 2)通过聚合对相同结果进行分析的有效方法
【发布时间】:2013-10-12 10:19:27
【问题描述】:

我需要从 DB 中获取经过过滤的不动产列表(按价格、位置等过滤),然后显示分析表(通过聚合框架制作),显示所有不动产的最低/最高/平均价格和总量。最后我需要的简化示例:

realties = [{_id: 1, price: 2500}, {_id: 1, price: 2500}, ... ];
stats = {total: 12500, max_price: 250000, min_price: 10000, avg_price: 150000};

最好的方法是什么?正如我所看到的,我必须进行 2 次相同的查询:第一次从 DB 获得分页结果时,然后 - 我必须将相同的条件放入聚合框架中的“$match”中?:

realteis = db.collection.where({city: "NYC", type: 2, ...}).skip(100).limit(25)
stats = db.collection.aggregation({$match: {city: "NYC", type: 2, ...}, $group: {...}} )

所以这是对 DB 的两个几乎相同的查询,对我来说似乎不是很有效,我相信有更好的方法。

有没有办法将过滤后的结果从第一个查询“链接”到聚合框架?

或者使用其他工具会更好吗? (但无论如何我都需要 Mongo)。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    不幸的是,没有办法将现有的 find() 结果自动“链接”到聚合框架作业中。一种方法是遍历您的 find() 结果并将每个结果插入一个新的临时集合中。然后针对具有过滤结果的临时集合运行聚合框架作业。这肯定会最大限度地减少两次查询较大数据集的需要。

    由于您尝试计算的统计数据非常简单,您可以让您的应用程序代码在线计算总、最小值、最大值和平均值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多