2013-10-05 34 views
0

我需要從DB(按價格,位置等過濾)獲取經過篩選的不動產列表,然後顯示分析表(通過Aggregation框架製作)顯示所有不動產的最小/最大/平均價格和總數量。我最後需要的簡單示例:MongoDB + Aggregation:1)通過查詢得到結果的有效方法2)通過對相同結果進行聚合來進行分析

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

這樣做的最佳方法是什麼?我可以看到我必須做出相同的查詢2次:第一次,當我從DB分頁結果,然後 - 我不得不把相同的條件下進入聚合框架「$匹配」?:

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

不幸的是,沒有辦法將現有find()結果自動「鏈接」到聚合框架作業中。一種方法是遍歷find()結果並將每個結果插入到一個新的臨時集合中。然後使用篩選結果針對臨時集合運行聚合框架作業。這肯定會最大限度地減少兩次查詢較大數據集的需求。由於您試圖計算的統計信息非常簡單,因此您可以讓應用程序代碼計算行中的總數,最小值,最大值和平均值。

相關問題