MongoDB +聚合:1)通过查询获得结果的有效方法2)通过聚合在相同结果上进行分析

时间:2013-10-05 12:26:27

标签: mongodb aggregation-framework

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

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

最好的方法是什么?正如我所看到的,我必须进行两次相同的查询:第一次从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。)

1 个答案:

答案 0 :(得分:1)

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

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