2011-08-29 83 views
0

考慮我在MongoDB中有兩個集合。一個產品的文件,如:查詢MongoDB最後的項目

{'_id': ObjectId('lalala'), 'title': 'Yellow banana'} 

,另一個類似的文件存儲的價格變化:

{'product': DBRef('products', ObjectId('lalala')), 
'since': datetime(2011, 4, 5), 
'new_price': 150 } 

一個產品可以有多個價格的變化。價格持續到有新的更改並帶有更新的時間戳。我想你已經發現了主意。

說,我有100個產品。我想查詢我的數據庫,以瞭解2011年6月9日那一刻每種產品的價格。在MongoDB中執行此查詢的最有效(快速)方式是什麼?假設我沒有緩存解決方案或緩存爲空。

我想到了關於prices集合的group聲明,其中reduce函數會在提供日期之前選擇最後的since,按product.$id分組。但在這種情況下,我不會受益於since字段上的索引,並且將掃描所有文檔。

任何想法?

回答

1

我有一個類似的問題,但GPS位置。我發現最快的方法是爲每個項目設置一個查詢,如果您習慣使用SQL數據庫,那麼這非常不直觀。

查詢其時間戳的項目小於或等於您查找的日期,並將結果限制爲1.對每個項目重複。要真正加快速度,可以並行運行多個查詢來利用MongoDB服務器上的所有內核。

+0

嗯,我認爲這是一個很大的否定。它真的具有可比性:100個查詢有1個項目,1個查詢有100個項目? – nkrkv

+0

我最初是爲了團隊選項而去的,而且速度非常慢。在同樣的任務下比mySQL慢很多。我甚至沒有想過要嘗試爲每個項目設置一個查詢,直到Mongo郵件列表中的某個人建議它。令我驚訝的是它比mySQL更快。 – FlappySocks