了解“太长”的时间有多长,因为这可能是高度相对的。它也可以帮助你知道你正在运行的是什么版本,以及你正在运行什么类型的硬件。
但考虑到这一点,你有上述信息,一个潜在的经济放缓是你
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