2016-05-20 68 views
3

我有一些地理空間+時間數據的集合,還有一些額外的屬性,我將在地圖上顯示這些屬性。這個集合目前有幾百萬個文檔,並且會隨着時間的推移而增長。MongoDB索引:多個單場vs單個化合物?

每個文檔具有以下字段:

  • 位置:[GeoJSON的對象]
  • 日期:[Date對象]
  • 縮放級別:[INT32]
  • EntryType:的ObjectID]

我需要能夠快速查詢此集合的位置(通常是geowithin查詢),日期(通常$ gte/$ lt ),ZoomLevel和EntryType。

我想知道的是:我應該包含所有四個字段一個複合索引,或每場單個索引,或者它們的組合?我在MongoDB的文檔閱讀以下內容:

對於包括與其它類型的 鍵沿2dsphere索引鍵的化合物指數,只有2dsphere索引字段確定索引是否 引用的文檔。

......這聽起來像是說,將2dsphere索引作爲位置屬於複合索引的一部分可能毫無意義?

任何清晰的這一點將不勝感激。

回答

2

對於您的用例,您將需要使用多個索引。

如果創建一個索引覆蓋文檔的各個領域的查詢將只能夠使用它時,它們包括在索引中的第一場。

因爲你需要這四個領域,我建議你分析你的數據訪問模式的任意組合查詢和過濾器看你實際使用的到底是什麼,併爲每一個或一羣人的具體指標。

編輯:對於你的問題關於2dsphere,它確實是有道理的,使他們複合。

該說明指的是「疏」選項。稀疏索引僅引用包含索引字段的文檔,對於2dspheres,只有不包含geojson/point數組的文檔纔會被忽略。

+0

啊哈!感謝您指出2dsphere稀疏選項位。現在更有意義。 – DanM