Mongoengine:如何按嵌入文档字段排序嵌入文档列表

6 投票
1 回答
3231 浏览
提问于 2025-04-18 02:15

我想要的效果是这样的:

class Comment(EmbeddedDocument):
    content = StringField()
    upvotes = IntField()
    pub_date = DateTimeField()

class Post(Document):
    title = StringField()
    comments = SortedListField(EmbeddedDocumentField(Comment))
    post_date = DateTimeField()

默认情况下,这个排序是按照评论提交的时间顺序来排的,但我想让这个 SortedListField 按照嵌入评论文档中的 upvotes 属性来排序。这样做可以吗?如果可以的话,我该怎么做呢?

1 个回答

7

其实这个内容在单元测试里有提到,如果从文档上看不太明白的话:

class Post(Document):
    title = StringField()
    comments = SortedListField(EmbeddedDocumentField(Comment)
                               ordering="upvotes", reverse=True)
    post_date = DateTimeField()

添加“ordering”这个关键词可以让你指定在改变项目时如何排序。你可能还想加一个反向排序的选项,这样可以确保“点赞”值最高的项目排在最前面。

单元测试里其实还有其他用法,所以它们总是一个很好的资源,可以帮助你发现一些可能不太常见的用法。

撰写回答