Как создать класс Document, имеющий свойство геопункта в motorengine
Motorengine - отличная библиотека для асинхронной работы с mongodb. Но мне интересно, как я могу сделать географический запрос с motorengine. Поскольку в библиотеке нет поддержки гео полей. Вариант, который я имею, использует мотор 2dspear index. Но было бы очень хорошо, если бы я нашел способ с помощью моторенгина.
Может кто-нибудь, пожалуйста, помогите мне с этим.
1 ответ
Я исправил проблему следующим образом.
from motorengine.document import Document
import pymongo
class BaseDocument(Document):
import pymongo
ASCENDING = pymongo.ASCENDING
DESCENDING = pymongo.DESCENDING
GEO2D = pymongo.GEOSPHERE
def __init__(self, alias=None, **kwargs):
indexes = self.__indexes__ if hasattr(self, "__indexes__") else []
if len(indexes) == 0:
return
def ensure_index(index, **spec):
self.objects.coll(alias).ensure_index(index, **spec)
for index_spec in indexes:
ensure_index([index_spec])
super(BaseDocument, self).__init__(**kwargs)
и использование индекса с ним.
class Team(BaseDocument):
__indexes__ = [('location', BaseDocument.GEO2D)]
name = StringField(required=True)
location = GeoPointField()
contact = StringField(required=True)