我有一个看起来像这样的模型:
class Person(models.Model):
data = JSONField()
该data
字段有 2 个属性name
, 和age
。现在,假设我想要一个分页查询集(每页包含 20 人),过滤器age
大于 25,并且查询集按降序排序。在通常的设置中,即规范化数据库中,我可以这样编写这个查询:
person_list_page_1 = Person.objects.filter(age > 25).order_by('-age')[:20]
现在,当使用存储在 JSONField 中的键进行过滤和排序时,上面的等价物是什么?我对此进行了研究,似乎它是 2.1 的一个功能,但我似乎找不到任何相关的东西。
我还有一个问题。假设我们使用 JSONField 进行过滤和排序。在这种情况下,ORM 是否必须在发送前 20 个对象之前获取所有对象、过滤和排序它们?也就是说,性能会合法地变慢吗?
显然,我知道标准化数据库对于这些事情要好得多,但我的手有点束缚。