瞭解「太長」的時間有多長,因爲這可能是高度相對的。它也可以幫助你知道你正在運行的是什麼版本,以及你正在運行什麼類型的硬件。
但考慮到這一點,你有上述信息,一個潛在的經濟放緩是你
collection.EnsureIndex(IndexKeys.GeoSpatial("PlacePoint"));
看起來你可能正在運行的每個查詢,這將是一個沒有沒有,因爲你應該只前在你的收藏中創建一個索引一次,我想這可能會減慢你的速度。
你可以嘗試從蒙戈shell中運行你的命令,像這樣(替換您的實際值我的佔位符,當然):
db.runCommand({ geoNear: "<collectionName>", near: [<lon>,<lat>], num: <num>, spherical:true })
然後再看看「統計」的信息,看看是否有什麼東西那似乎有不妥之處。我個人收集了234107個具有地理空間索引的地方,並且我運行了一個geoNear命令,該命令的座標遠離我集合中的任何地方,以幫助確保它掃描每一個地方。我得到了以下結果(在適中的強大硬件上運行2.2.3版本:Core i5,16 GB RAM,7200 RPM HDD - 數據集由相當小的文檔組成,包括經緯度點+少量附加數據):
"stats" : {
"time" : 261,
"btreelocs" : 0,
"nscanned" : 234107,
"objectsLoaded" : 133,
"avgDistance" : 1.380670166668938,
"maxDistance" : 1.3807179692447809
},
的查詢,這是更接近我收藏的地方,我得到:
"stats" : {
"time" : 15,
"btreelocs" : 0,
"nscanned" : 6211,
"objectsLoaded" : 29,
"avgDistance" : 0.003811909711576418,
"maxDistance" : 0.003919781450489085
},
「時間」這裏的單位是毫秒,這似乎很合理的我。在C#中運行GeoNear函數總是立即返回給我,所以我不認爲你的緩慢結果是由於C#驅動程序的低效率造成的。
你真的需要提供更多關於「太長」的細節;你究竟在測量什麼,你的服務器規格是什麼?我還建議查看在服務器上執行查詢時收集的['mongostat'](http://docs.mongodb.org/manual/reference/mongostat/)輸出。 – Stennie 2013-03-16 05:59:34