Как создать класс 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)
Другие вопросы по тегам