#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)…