Как получить данные из коллекции использую mongoengine?

Рейтинг: 1Ответов: 0Опубликовано: 20.05.2023

Есть две коллекции: author и quote структура коллекций:

from mongoengine import Document
from mongoengine.fields import StringField, ListField, ReferenceField


class Author(Document):
    fullname = StringField()
    born_date = StringField()
    born_location = StringField()
    description = StringField()


class Quote(Document):
    tags = ListField()
    author = ReferenceField(Author)
    quote = StringField()

Мне нужно найти цитату(quote) по определенному автору, но у меня ничего не находит, будто такого автора нет. Функция для поиска цитат:

def search_quote_from_name(user_args):
    name = user_args.split('name:')[1]
    # get obj Author from name to be sure everything is correct
    author = Author.objects(fullname=name).first()
    quotes = Quote.objects(author=author.id)
    for quote in quotes:
        print(quote)

Я могу взять объект нужный author и обратиться к его методам получив правильные данные, то есть проблема в строке:

quotes = Quote.objects(author=author.id)

Пробовал еще через author__fullname=author.fullname, но тогда ошибка получается:

mongoengine.errors.InvalidQueryError: Cannot perform join in mongoDB: author__fullname

UPD: Я могу обратиться к найденным в цикле quote.quote и quote.tags и все будет верно, но при quote.authors будет ошибка:

raise DoesNotExist(f"Trying to dereference unknown document {dbref}")
mongoengine.errors.DoesNotExist: Trying to dereference unknown document DBRef('author', 'Albert Einstein')

Не могу найти ошибку свою в построении связи quote-author.

Ответы

Ответов пока нет.