如何使用MongoEngine获取最新的EmbeddedDocument对象

时间:2013-04-10 04:13:58

标签: python mongodb flask mongoengine

我正在尝试进行查询以获取已发布到任何帖子的最新评论,但无法正确使用。我基本上想要显示网站上发布的所有评论的活动列表。

我正在使用烧瓶,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)

任何想法都将不胜感激。 干杯

2 个答案:

答案 0 :(得分:1)

EmbeddedDocumentField表示此文档只是自己文档的一部分,如字典。因此,您可以获得包含所有评论的所有帖子,然后您可以获得所有评论并对其进行排序。或者,您可以将comments列为ReferenceField,将Comment列为Documetn。或者你可以编写自己的mongo函数来完成它。

也许pymongo允许获得列表的一部分,但我不知道如何。但据我所知,mongoengoe不允许它出框。

答案 1 :(得分:1)

该特定用例的架构设计很差。您应该将注释存储为单独的文档,然后您可以以有效的方式查询数据。

或者,您可以将最新的x条评论非规范化并存储在单独的文档/集合中。您必须手动管理此集合。

mongodb文档在data modeling上有一个很好的部分,可能会有所帮助。