2014-03-31 70 views
0

我的文檔的集合 - 活動 - 有場地/地址:指數VS聚集

venue: { 
    name: String, 
    street: String, 
    city: String 
    ... 
} 

當用戶創建一個新的事件,我想提供一個自動完成場的場地 - 通過非常有序城市,如果我可以事先確定用戶的位置。

我看到Mongo提供了一些管理數據的方法,從簡單地搜索集合,聚集等。對於我的情況,推薦的方法是什麼?

如果我索引事件集合 - 我什麼時候需要關注搜索速度?

對於聚合...我以前沒有使用它,但它似乎很適合,特別是與地理搜索,但我不清楚什麼時候發生聚合。這是一旦我設置它就自動完成/填充,或者我需要在此上運行cron作業。我發現的例子在這方面還不清楚。

很想聽聽人們遇到類似問題的經驗。

回答

0

Aggregations只是一個查詢的更先進的版本 - 就像在SQL你可以做SELECT * from T1SELECT foo, count(*) from T1 GROUP BY foo所以,除非你要查詢的東西是密集計算你對cron作業的問題是不是真的適用,要定期預先計算它。

當您查詢到您的index the fields時,結果是查詢的運行速度比未索引的查詢快得多 - 就像在RDBMS中一樣,如果您熟悉這些查詢的話。

聽起來你想根據用戶已經輸入的內容進行查詢。如果我在舊金山,加利福尼亞州和我開始在場地字段中鍵入「S」,可能你想運行查詢db.venues.find({city:"San Francisco",name:/^S/})這意味着「在舊金山市的地點,名稱以'S'開頭。」

我懷疑你應該保存座標,以便你可以在MongoDB中使用geo-spacial search功能 - 那麼你會得到匹配的結果,按照離用戶設置的位置最近的距離排序。

你可以用查詢來做到這一點,所以我沒有看到你需要一個聚合,但是你可能會使用聚合來進行場地的各種分析 - 支持相同的查詢以及其他強大的數據操作操作。

+0

謝謝 - 現在更清楚了。 – cyberwombat