2013-10-16 29 views
0

我存儲在mongoDB中的座標與谷歌地圖座標的座標 - 例如20.2345,34.2034。我需要的是在某個搜索範圍內(以米爲單位)獲取所有文檔。但我很困惑,如果我應該使用2dsphere索引和$nearSphere查詢或2d索引和$near查詢???哪個座標與使用來自Google地圖的座標的mongodb地理查詢配合使用?


好吧我檢查,並用2d指數雙雙$near$nearSphere查詢返回奇怪的結果。使用2dsphere索引使用$near$nearSphere查詢返回正確的結果。我檢查了兩點之間的距離=〜3800米。然後我正在尋找一個包含第二點的閾值半徑(假設從第一點開始看)。下面是結果:

  1. 指數: '2D',$附近 - >半徑=〜57
  2. 指數: '2D',$ nearSphere - >半徑= 0.99
  3. 指數: '2dsphere',$近 - >半徑爲〜3850
  4. 指數: '2dsphere',$ nearSphere - >半徑爲〜3850

我不知道什麼用2d指數回事 - 我總是用$geometry: { type: 'Point' ...總是使用米不弧度...

任何方式只是使用2dsphere索引,它會沒事的。我也不得不將collection從'2d'拖放到'2dsphere'的重建索引(db.collection.reIndex()沒有工作)

回答

1

要更加密切地反映地球是球體,您需要2dsphere索引:http://docs.mongodb.org/manual/applications/geospatial-indexes/

我不能完全肯定在2dsphere指數$near$nearSphere之間的差異,但我得到的印象是,要麼將工作。它看起來像$nearSphere允許您指定弧度而不僅僅是米。

+0

但是當我使用相同的座標值時,在我的問題中提到的這兩個選項之間有什麼區別? – user606521

+0

根據您的編輯和輸出,我不確定爲什麼'2d'索引找到半徑更小的第二個文檔。也許如果你粘貼查詢字符串?無論如何,我認爲你的分析是正確的。除非有明確的理由需要'2d'索引,否則使用'2dsphere'。 – GSP