计算ArrayField列的所有不同值的最有效方法是什么。假设我有一个名称MyModel
和cities
字段为postgres.ArrayField的模型。
#models.py
class MyModel(models.Model):
....
cities = ArrayField(models.TextField(blank=True),blank=True,null=True,default=list) ### ['mumbai','london']
并假设我们MyModel
有以下3个对象,其cities
字段值如下。
1. ['london','newyork']
2. ['mumbai']
3. ['london','chennai','mumbai']
cities
字段的不同值进行计数会在整个列表中执行,而不是在每个元素上执行。## Query
MyModel.objects.values('cities').annotate(Count('id')).order_by().filter(id__count__gt=0)
cities
为cities
field.list的每个元素上的field计算不同的值,这应该给出以下最终输出。[{'london':2},{'newyork':1},{'chennai':1},{'mumbai':2}]
在数据库级别本身中通过操作进行分组。
from django.db import connection
cursor = connection.cursor()
raw_query = """
select unnest(subquery_alias.cities) as distinct_cities, count(*) as cities_group_by_count
from (select cities from sample_mymodel) as subquery_alias group by distinct_cities;
"""
cursor.execute(raw_query)
result = [{"city": row[0], "count": row[1]} for row in cursor]
print(result)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句