Было бы полезно знать, как долго «слишком длинный», поскольку это может быть очень относительным. Это также может помочь узнать, какую версию вы используете, а также какое оборудование вы используете.
Но, учитывая только ту информацию, которая у вас есть выше, один потенциальное замедление вашего
collection.EnsureIndex(IndexKeys.GeoSpatial("PlacePoint"));
Похоже, что вы могли бы работать, что перед каждым запросом, который не был бы-нет, так как вы должны только создайте индекс в своей коллекции один раз, и я бы предположил, что это может замедлить вас.
Вы могли бы попробовать запустить команду из Монго оболочки, как и (подставляя свои реальные значения для моих заполнителей, конечно):
db.runCommand({ geoNear: "<collectionName>", near: [<lon>,<lat>], num: <num>, spherical:true })
Тогда посмотрите на информацию «Статистика», чтобы увидеть, если есть что-то там это кажется неправдой. У меня лично есть коллекция с 234107 местами с геопространственным индексом на них, и я запустил команду geoNear с координатами, которые были намеренно удалены от любого из мест в моей коллекции, чтобы гарантировать, что он будет сканировать каждый из них. Я получил следующие результаты (работающая версия 2.2.3 на скромно мощном оборудовании: Core i5, 16 ГБ RAM, 7200 RPM HDD - набор данных состоял из довольно небольших документов, состоящих из точек lat/lon + небольшого количества дополнительных данных):
"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
},
«время» здесь находится в миллисекундах, который кажется очень разумным мне. Запуск функции GeoNear в C# всегда возвращался сразу для меня, поэтому я не думаю, что ваши медленные результаты будут вызваны любой неэффективностью драйвера C#.
Вам действительно нужно предоставить более подробную информацию о «слишком длинном»; что вы на самом деле измеряете, каковы ваши характеристики сервера? Я также хотел бы рассмотреть вывод ['mongostat'] (http://docs.mongodb.org/manual/reference/mongostat/), собранный во время выполнения вашего запроса на сервере. – Stennie