0

我需要从 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)。

4

1 回答 1

1

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

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

于 2013-10-05T16:16:50.390 回答