Как получить $ рядом с работой в Flask-Mongoalchemy - PullRequest
0 голосов
/ 16 января 2019

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

Я попытался переформатировать мою модельную схему, чтобы она содержала [type: "Point"], и даже упорядочил мою долготу и широту в список. Я также попытался добавить в свою модель индексы «2dsphere» с использованием мета на основе того, что я видел в документации по монго-алхимии.

Моя модель

Класс события (db.Document):

meta = {
    'indexes': [
        ("*location.coordinates", "2dsphere")
    ]
}

user_id = db.StringField()
uuid = db.StringField()
name = db.StringField()
address = db.StringField()
start_time = db.DateTimeField(required=True, default=datetime.datetime.now())
end_time = db.DateTimeField(required=True, default=datetime.datetime.now())
location = db.DictField(db.AnythingField())

Теперь это мой основной код запроса

def get(self):
    latitude = float(request.args.get('lat'))
    longitude = float(request.args.get('long'))

    print(longitude);
    print(latitude);

    event = Event.query.filter({"location" :
   { "$near" :
        {
        "$geometry" : {
           "type" : "Point",
           "coordinates" : [longitude, latitude] },
        "$maxDistance" : 4000
     }
   }
}).first()
    print(event);

[2019-01-15 23: 20: 59,797] ОШИБКА в приложении: исключение на / v1 / событие [GET] Traceback (последний вызов был последним): Файл "/home/creative_joe/.local/lib/python3.5/site-packages/flask/app.py", строка 1813, в full_dispatch_request rv = self.dispatch_request () Файл "/home/creative_joe/.local/lib/python3.5/site-packages/flask/app.py", строка 1799, в dispatch_request вернуть self.view_functionsrule.endpoint Файл "/home/creative_joe/.local/lib/python3.5/site-packages/flask_restplus/api.py", строка 325, в оболочке resp = ресурс (* args, ** kwargs) Файл "/home/creative_joe/.local/lib/python3.5/site-packages/flask/views.py", строка 88, в поле зрения вернуть self.dispatch_request (* args, ** kwargs) Файл "/home/creative_joe/.local/lib/python3.5/site-packages/flask_restplus/resource.py", строка 44, в dispatch_request респ = мет (* args, ** kwargs) Файл "/media/creative_joe/3004586c-9a2d-4cb0-8a5f-d41fe99afc05/home/creative_joe/MonkeyMusic.server/app/views/main.py", строка 323, в get «$ maxDistance»: 4000 Файл "/home/creative_joe/.local/lib/python3.5/site-packages/mongoalchemy/query.py", строка 139, в первую очередь для док в инер (сам): Файл "/home/creative_joe/.local/lib/python3.5/site-packages/mongoalchemy/query.py", строка 412, в следующем вернуть self._next_internal () Файл "/home/creative_joe/.local/lib/python3.5/site-packages/mongoalchemy/query.py", строка 416, в _next_internal значение = следующий (self.cursor) Файл "/home/creative_joe/.local/lib/python3.5/site-packages/mongoalchemy/py3compat.py", строка 41, в следующем верните его. следующий () Файл "/home/creative_joe/.local/lib/python3.5/site-packages/pymongo/cursor.py", строка 1189, в следующем если len (self .__ data) или self._refresh (): Файл "/home/creative_joe/.local/lib/python3.5/site-packages/pymongo/cursor.py", строка 1104, в _refresh самостоятельно .__ send_message (д) Файл "/home/creative_joe/.local/lib/python3.5/site-packages/pymongo/cursor.py", строка 982, в __send_message helpers._check_command_response (первый) Файл "/home/creative_joe/.local/lib/python3.5/site-packages/pymongo/helpers.py", строка 155, в _check_command_response поднять OperationFailure (msg% errmsg, код, ответ) pymongo.errors.OperationFailure: запрос на обработку ошибок: ns = heroku_c9gg06k0.EventTree: поле GEONEAR = местоположение maxdist = 4000 isNearSphere = 0 Сортировать: {} Proj: {} планировщик вернул ошибку: не удалось найти индекс для запроса $ geoNear

...