У меня есть модель как
from jsonfield import JSONField
class data(model):
content=JSONField()
.......
Моя примерная запись БД для данных модели будет
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" и список идентификаторов, таких как
"abc@gmail.com" : [1,3,5]
"sfg@gmail.com : [4,6]
Я использую django 1.11 и python 2.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: Есть ли возможность запрашивать только уникальные значения из поля JSON с помощью Django.
Попытка distinct()
, но в части значений * 1025 она не работает как '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: Есть ли способ повысить эффективность обработки этих данных?