2012-07-22 63 views
1
location: {lat: Number, 
      lng: Number} 

位置是我mongodb中的2d索引,我一直在使用它進行地理空間搜索,工作正常。mongo:「2d」索引和正常索引

現在,如果我需要搜索db.find({lat:12.121212,lng:70.707070}),它會使用相同的索引嗎?或者,我需要定義一個新的索引嗎?如果是這樣,怎麼樣?

我正在使用Node.js的

回答

1

用來做地理空間命令二維指數貓鼬司機是不會幫助在這兩個領域的等價比賽。對於您需要定義在兩個子文檔的複合索引,這樣的事情:

db.collection.ensureIndex({"location.lat" : 1, "location.lng" : 1}) 

這個工作最適合我與測試組數據 - 你也可以定義上的位置正常指數領域本身,但效率較低。您可以使用提示測試相關性能,並解釋任何索引組合。例如:

db.collection.find({"location.lat" : 179.45, "location.lng" : 90.23}).hint("location.lat_1_location.lng_1").explain() 

可以爲你其實希望的任何指標做到這一點,雖然檢查結果返回,你將需要刪除.explain()

也請記住,查詢一次只能使用一個索引,所以如果你想要結合這兩個(等價和一個地理空間搜索),那麼2d索引將是唯一使用的索引。

注意:以上所有示例均來自MongoDB JS shell,而不是node.js

+0

Adam,謝謝。這有助於。 – user644745 2012-07-22 17:07:25