Недавно я обновил монгольскую версию MongoDB с версии 2.2.1 до версии 2.4.6 и pymongo до версии 2.6.2.Геопространственный запрос MongoDB/PyMongo: расстояние между документами от точки
Одной из причин обновления является возможность новой версии MongoDB рассчитать и вернуть расстояние от документов (включая правильные координаты) от центра геопространственного запроса as explained here.
До сих пор я выполнить следующий запрос:
db.collection.find({"loc": {"$within": {"$center": [[LON, LAT], RADIUS]}}})
где LON, LAT и Radius являются собственные числа. Затем я программно вычисляю расстояние от центра для каждого возвращаемого документа.
Теперь я пытаюсь, чтобы MongoDB выполнял расчет расстояний от моего имени, из-за большей эффективности по сравнению с моим кодом.
То, что я пытаюсь сейчас следующий:
db.collection.find({"loc": {"$geoWithin": {"$centerSphere": [[LON, LAT], RADIUS]}}})
где RADIUS теперь рассчитываются правильно (радиус в км/6371), но я получаю те же результаты, что и старший запрос.
Как мне изменить новый запрос, чтобы получить дополнительное поле «dis» для каждого документа?
Геопространственный индекс - 2D, который должен работать в соответствии с документами, но при необходимости я могу изменить его на 2dsphere. Кто-нибудь имеет хорошее предложение?
спасибо. «Сферическое: истинное» означает, что индекс также должен быть изменен на 2dsphere? – user1981924
сферический: true указывает, что расчет радиуса выполняется на сферической поверхности в противоположность плоской плоскости. Если индекс имеет тип «2dsphere», вы должны использовать сферическую: true. Если индекс имеет тип «2d», вы можете использовать либо сферическое: истинное, либо сферическое: false. – jribnik