JSONB PostgreSQL类型:如何查找

3

我不确定在PostgreSQL 9.4中我们可以使用JSONB类型到什么程度。

例如,如果我将以下内容存储在一个JSON字段中:

 id |                 data                 
----+--------------------------------------
  1 | {"a": ["1", "2"]}
  2 | {"b": ["1", "5"]}
  3 | {"a": ["1", "3", "8"], "c": ["1", "2"]}
  4 | {"a": ["7", "8"]}

我该如何选择JSONB字段中值为1的键名为"a"的行?

对于这个例子,结果应该是:

 id |                 data                 
----+--------------------------------------
  1 | {"a": ["1", "2"]}
  3 | {"a": ["1", "3", "8"], "c": ["1", "2"]}
(2 rows)

如果可以的话,如何在Django中使用它?

谢谢。

3个回答

0
一个解决你问题的查询是:
select *
from mytable
where data -> 'a' ? '1'

0

您可以使用以下查询获取它:

yourModel.objects.filter(data__contains={"a": [*]})

你可以看一下this

0

对于Django来说没问题,但是不谈Django,有没有一种纯SQL的方式可以查询我所需要的内容?查看http://www.postgresql.org/docs/9.4/static/datatype-json.html,我不确定是否容易查找具有列表字典的特定值。 - Michael
是的,可以使用包含运算符,即 WHERE data @> {"a": ["1"]}。 将其编写为 Django 查找应该很容易,data__contains = {"a": ["1"]},其中 contains 是生成 @> SQL 的自定义查找。 - akaariai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接