Я пытаюсь сделать запрос, чтобы получить последние комментарии, которые были отправлены к любому сообщению, но не могу сделать это правильно. Я в основном хочу показать список действий всех комментариев, размещенных на веб-сайте.
Я использую флягу, mongodb с mongo-engine.
Вот мои модели:
class Post(db.Document):
slug = db.StringField(max_length=255, required=True)
title = db.StringField(max_length=255, required=True)
body = db.StringField(max_length=255, required=True)
comments = db.ListField(db.EmbeddedDocumentField('Comment'))
class Comment(db.EmbeddedDocument):
message = db.StringField(required=True)
author = db.ReferenceField(User, dbref=True)
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
Любые идеи были бы хорошы. Ваше здоровье
Ответ 1 · рейтинг 1 · Ross
Дизайн схемы для этого конкретного варианта использования оставляет желать лучшего. Вы должны хранить комментарии как отдельный документ, а затем вы можете запрашивать данные так, как вам нужно эффективно.
В качестве альтернативы вы можете денормализовать и хранить последние x комментариев в отдельном документе/коллекции. Однако вам придется вручную управлять этой коллекцией.
В документации mongodb есть хороший раздел по моделированию данных, который может оказаться полезным.
Ответ 2 · рейтинг 1 · tbicr
EmbeddedDocumentField означает, что этот документ является частью собственного документа, такого как словарь. Таким образом, вы можете получить все сообщения со всеми комментариями, затем вы можете получить все комментарии и отсортировать их. Или вы можете сделать comments списком ReferenceField и Comment списком Documetn. Или вы можете написать собственную функцию монго, которая сделает это.
Возможно, pymongo позволяет получить часть списка, но я не знаю, как это сделать. Однако, насколько я знаю, mongoengoe не позволяет это делать.