2012-02-16 99 views
0

因此,我將我的一些代碼從SQL移動到mongodb,並且有幾件事情對我來說還不是很清楚。什麼是總和和排序mongodb查詢的最佳途徑

比方說,我有以下簡單的SQL查詢(只是一個例子)

select count(a.id) as count, b_id 
     from table group by b_id 
     where c_id=[SOME ID] 
     group by b_id 
     order by count desc; 

我認爲每個人都明白是什麼一樣。

現在用mongo我可以使用多種方法,在mongo端執行所有操作,獲取總結的結果並對客戶端進行排序,或者僅將原始數據提交給客戶端,然後執行所有處理。

對於上面的查詢,最好的辦法是用一些內部的mongodb機制(mapreduce等)在數據庫中完成所有操作,或者將集合提取到客戶端並在那裏處理。通常數據集將會很大,但如果需要的話,查詢可以分成幾個部分。

客戶端是基於Java的,如果重要的話。

回答

2

隨着即將到來的MongoDB Aggregation Framework它是很容易做你需要做的。它已經在2.1.x開發版本中提供。

如果您堅持2.0或更低版本,則必須查看您提及的選項或架構更改,以避免首先在現場聚合中執行操作。例如,在NoSQL中,在源數據被操縱時,通過聚合數據來維護字段或文檔是很常見的。最常見的例子是維持一個數組的大小作爲一個字段:

update({..}, {$push:{array:element}, $inc:{elementCount:1}) 
+0

我不生產(還),所以我可以使用,在您看來是匯聚框架的情況下始終表現最好的方法以上? – mikkom 2012-02-16 12:26:43

+0

除了手動管理彙總數據(這是非常情景化的)是的。 AF是完全原生的,而組和m/r是JavaScript供電的,因此單線程和(相對)慢。坦率地說,如果你想m/r我會與Hadoop集成,而不是使用MongoDB m/r – 2012-02-16 12:30:01

+0

謝謝,我想我將不得不安裝最新的unstable。 – mikkom 2012-02-16 12:33:34

1

您可以使用Map/Reduce對mongo端的數據進行分組,然後在客戶端或mongo端進行排序。您還可以找到地圖/減少示例here.