2013-04-10 2 views
0

Я пытаюсь сделать запрос, чтобы получить последние комментарии, которые были отправлены на любую почту, но не может понять это правильно. Я в основном хочу показать список всех комментариев, размещенных на веб-сайте.Как вы можете получить последние объекты EmbeddedDocument с MongoEngine

Я использую колбу, mongodb с монго-двигателем.

Вот мои модели:

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) 

Любые идеи будут оценены. Cheers

ответ

1

Дизайн схемы для этой конкретной утилиты неудовлетворительный. Вы должны хранить комментарии как отдельный документ, а затем вы можете запрашивать данные так, как вам нужно.

В качестве альтернативы вы можете денормализовать и хранить последние комментарии x в отдельном документе/коллекции. Однако вам придется вручную управлять этой коллекцией.

Документы mongodb имеют хороший раздел на data modeling, который может быть полезен.

+0

Может быть плохой схемой, но документы и демонстрации Flask Mongoengine в Интернете используют нечто очень похожее. Кроме того, вы не отвечаете на вопрос. –

+0

Я думал, что мое второе предложение ответило на вопрос - в основном хранят комментарии в своей собственной коллекции. Это означает, что вы можете эффективно обрабатывать комментарии. Я даже предложил другую идею, используя эту схему, но добавив еще одну последнюю коллекцию комментариев. Предоставление двух решений проблемы. – Ross

1

EmbeddedDocumentField означает, что этот документ только часть собственного документа, такого как словарь. Поэтому вы можете получить все сообщения со всеми комментариями, затем вы можете получить все комментарии и отсортировать их. Или вы можете сделать comments как список ReferenceField и Comment как Documetn. Или вы можете написать собственную функцию mongo, которая сделает это.

Возможно, pymongo позволяет получить часть списка, но я не знаю, как это сделать. Однако, как я знаю, монгоенго не разрешает это делать.