mongoengine запросить список встроенных документов
Я сталкиваюсь с классической ловушкой, но не могу найти хороший пример с mongoengine того, что я должен делать.
Используя стандартный пример блога, у меня есть что-то вроде:
class Comment(EmbeddedDocument):
author = StringField()
approved = BooleanField(default=False)
class Post(Document):
id = StringField(required=True, unique=True)
comments = ListField(EmbeddedDocumentField(Comment))
Для данного сообщения в блоге (с идентификатором some_id
) Я просто хочу загрузить список утвержденных комментариев. Я продолжаю случайно загружать все комментарии, если какие-либо комментарии к посту одобрены, потому что я сопоставляю элемент списка.
2 ответа
Поскольку комментарии содержатся в документе, комментарии всегда будут содержать все комментарии.
Добавьте в Post свойство, которое фильтрует и возвращает только список утвержденных комментариев, например:
@property
def approved_comments(self):
return [comment for comment in self.comments if comment.approved]
Попробуйте это в ваших моделях:
class Comment(EmbeddedDocument):
author = StringField()
approved = BooleanField(default=False)
class Post(Document):
id = StringField(required=True, unique=True)
comments = EmbeddedDocumentListField(Comment)
ЗАМЕЧАНИЕ: EmbeddedDocumentListField вместо ListField
Тогда ваш запрос таким образом
comments_approved = Post.objects.get(pk=post_id).comments.filter(approve=True)
Надеюсь, вам поможет!