Метод find_one возвращает keyerror - PullRequest
0 голосов
/ 19 января 2020

Вот мой код

@classmethod
def get_by_email(cls, email):
    data = Database.find_one("users", {'email': email})
    if data is not None:
        return cls(**data)

вывод:

KeyError: 'email'

Соответствующий документ присутствует в mongodb

db.users.findOne({"email": "test@test.com"})

{
    "_id" : ObjectId("5e22fbde0cef633ad86a736f"),
    "email" : "test@test.com",
    "password" : "password"
}

Теперь я не уверен, что я делаю не так с этим кодом. Любые предложения, пожалуйста. я использую python 3,6

Ответы [ 2 ]

1 голос
/ 19 января 2020

Вы можете использовать collection напрямую вместо предоставления имени collection для базы данных. Как показано ниже:

@classmethod
def get_by_email(cls, email):
    data = Database.users.find_one({'email': email})
    if data is not None:
        return cls(**data)

или аналогично:

@classmethod
def get_by_email(cls, email):
    data = Database['users'].find_one({'email': email})
    if data is not None:
        return cls(**data)
0 голосов
/ 19 января 2020

EDIT: исправлено благодаря n1rna

find_one () требуется параметр dict. Попробуйте:

data = Database.users.find_one({'email': email})
...