Get len of the ArrayField Postgres Django



我有一个模型:-

class ModelA(models.Model):
    field1 = ArrayField(models.IntegerField())

我想获取模型 A 的最大长度为 field1 的前 10 个对象。我看到 Django 文档中有一个len过滤器,但这不符合我的目的。

如何获取字段 1 最大长度的前 10 个对象?

如果你确定你的数组是一维的,你可以使用 PostgreSQL 函数cardinality

ModelA.objects.extra(select={'length':'cardinality(field1)'}).order_by('length')

或者,使用 array_length 函数(第二个参数是寻求的维度数)

ModelA.objects.extra(select={'length':'array_length(field1,1)'}).order_by('length')

我终于也能够获得数组中元素的频率:-

q = """
with norm (id, element) as (
    select id, unnest(field1) from model;
)
select id, sum(case when element = 2 then 1 else 0 end)  as count
from norm
group by id
order by count
limit 10;
"""

a = Model.objects.raw(q)

最新更新