[英]Get len of the ArrayField Postgres Django
I've a model:- 我有一个模特:
class ModelA(models.Model):
field1 = ArrayField(models.IntegerField())
I want to get the top10 objects of ModelA having maximum length of field1. 我想获得最大长度为field1的ModelA的top10对象。 I see that a len
filter is available in Django Docs , but that just does not serves my purpose. 我看到Django Docs中提供了len
过滤器,但这不符合我的目的。
How can I get top10 objects having maximum length of field1? 如何获得具有field1最大长度的top10对象?
If you are sure your array is 1-dimensional, you can use PostgreSQL function cardinality
如果确定数组是一维的,则可以使用PostgreSQL函数cardinality
ModelA.objects.extra(select={'length':'cardinality(field1)'}).order_by('length')
Or, using array_length
function (with second argument being the number of dimensions sought) 或者,使用array_length
函数(第二个参数是所寻求的维数)
ModelA.objects.extra(select={'length':'array_length(field1,1)'}).order_by('length')
I was finally able to get the frequency of the elements in the array as well:- 我终于也能够获得数组中元素的频率:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.