【发布时间】:2020-07-03 17:41:19
【问题描述】:
我正在使用 Flask-Mongoengine 作为我的烧瓶应用程序的 ORM。我定义了一个 Document 来将唯一版本存储在一个字符串中:
MyDocument(db.Document):
version = db.StringField(primary_key=True, required=True)
StringField中存储的值格式如下:
a.b.c.d
在使用order_by 进行查询时遇到问题:
MyDocument.objects.order_by('version')
更准确地说,如果版本的第一部分(上述格式示例中的a)包含多个数字,则无法正确排序(例如:15.20.142 1.7.9)。虽然我显然可以做类似的事情:
tmp = Document.objects.all()
result = some_merge_sort(tmp)
但是,这需要编写、测试和维护排序算法。这让我想到了下一个解决方案,即覆盖order_by 中使用的比较器。问题是,我不确定如何正确执行此操作。我必须定义一个自定义属性类型,还是有一些我应该覆盖的钩子?
无论如何,在我重新编写轮子之前,我想我会成为 stackoverflow 上的好人。
【问题讨论】:
-
嘿,谢谢你的详细问题。您是否还可以添加您现在拥有的代码的 sn-p,理想情况下易于重现?这将有助于其他人为您提供量身定制的答案。
-
@NickShebanov 我已经添加了相关代码sn-ps。
标签: python-3.x mongoengine flask-mongoengine