mongodb геоиндекс $рядом с запросом застрял

#mongodb #mongodb-query #pymongo #geonear

Вопрос:

У меня есть коллекция из 10 миллионов документов, каждый из которых имеет географический индекс (x от 0 до 1, y всегда 0).

Я пытаюсь запросить до n ближайших результатов к точке, которые относятся к какой-либо категории

 x_loc = 1.0 category = 'mid-level' cursor = collection.find(  {'category': category, 'point': {'$near': [x_loc, 0]}},  limit=10)  

В случае , когда есть только один документ с category == "mid-level" и point == [0.01, 0.0] , и x_loc близок к [1, 0], обработка запроса занимает очень много времени (больше, чем запрос всей коллекции).

Как этого можно избежать?

Комментарии:

1. будет полезно, если вы сможете добавить еще несколько деталей о том, каков размер коллекции? Как выглядит один документ? И каков вывод из db.collection.getIndexes() ? ( здесь только предположение , но если ваша категория полей не проиндексирована, mongo загрузит все документы в mermory до тех пор, пока не будет найдена единственная запись «среднего уровня»), кроме того, если у вас есть правильные индексы, потребуется вывод из explain(true)…