简体   繁体   English

获取ArrayField Postgres Django的len

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM