我有一个像这样的模特
from jsonfield import JSONField
class data(model):
content=JSONField()
.......
对于模型数据,我的示例DB条目是
data1 : id =1, content = {"email":"abc@gmail.com"}
data2 : id =2, content = {"email":"cdf@gmail.com"}
data3 : id =3, content ={"email":"abc@gmail.com"}
data4 : id = 4, content ={"email":"sfg@gmail.com"}
data5 : id = 5, content ={"email":"abc@gmail.com"}
data6 : id = 6, content ={"email":"sfg@gmail.com"}
我需要找到非唯一的“email”值和id列表,比如
"abc@gmail.com" : [1,3,5]
"sfg@gmail.com : [4,6]
我使用的是django1.11、python2.7和postgres9.3
我的问题是
lists = data.objects.filter(....).extra(select={'email':"content->>'email'"}).values('email','id')
我得到的结果是
{"email":"abc@gmail.com","id":1}
{"email":"cdf@gmail.com","id":2}
{"email":"abc@gmail.com","id":3}
{"email":"sfg@gmail.com","id":4}
{"email":"abc@gmail.com","id":5}
{"email":"sfg@gmail.com","id":6}
包括唯一值和非唯一值,这不是必需的。你知道吗
查询1:是否可以使用Django只查询JSON字段中的唯一值。你知道吗
尝试了distinct()
,但由于值部分中的'id'和'email'都失败了
不管怎么说,我们把它作为
for d in lists:
if d['email'] not in temp:
temp[d['email']]=[d['id']]
else:
temp[d['email']].append(d['id'])
得到所有值的结果,包括唯一值和非唯一值,如下所示
"abc@gmail.com" : [1,3,5]
"sfg@gmail.com" : [4,6]
"cdf@gmail.com" : [2] ## not desired
查询2:是否有任何方法可以更有效地处理这些数据?你知道吗
对于postgresql和django>;=1.9可以尝试ArrayAgg。你的问题可能是这样的
相关问题 更多 >
编程相关推荐