sql - 如何查询 PostgreSQL 9.5 JSONB 列中是否存在某个键?

标签 sql json postgresql operators jsonb

我有一个 PostgreSQL 9.5 数据库表,其中有一个名为 attrs 的 JSONB 列。我想检查该 attires 列中是否存在特定键。我想我可以使用?运算符,但我不明白语法。

SELECT * FROM cereal WHERE attrs ? 'lbs';

这将返回,“注意参数的数量 < 参数标记的数量。”

SELECT * FROM cereal WHERE attrs ? | ARRAY['lbs'];

这将返回,“注意参数的数量 < 参数标记的数量。”

如何查询 JSONB 列中是否存在键?

最佳答案

您实际上已经找到了您的第一个查询。

? 运算符的局限性在于它仅检查 jsonb 值的顶级键。因此,您要查找的 key 很可能深埋在 JSON 文档中的某处。您可以使用多个 jsonb 运算符或处理函数来向下钻取键应该位于的位置,然后进行测试:->, # >jsonb_each()jsonb_array_elements() 等。因此,您使用其中任何一个并对结果运行 ? 运算符,例如:

SELECT *
FROM cereal
WHERE (attrs -> 'weight') ? 'lbs';

...对于像这样的 JSON 文档:

{"ingredients": {...}, "weight": {"lbs": 4, "kg": 1.8}, ...}

如果不了解 JSON 文档的结构,您将无法获得更具体的答案。

关于sql - 如何查询 PostgreSQL 9.5 JSONB 列中是否存在某个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077818/

相关文章:

javascript - 访问position[i]处的json元素并在map函数中更改它们的值

javascript - 来自来源 'null' 已被 CORS 策略 : Cross origin requests 阻止

postgresql - pgbackups 错误 : backup url is invalid?

java - 使用 jpa/hibernate Spring 添加新条目时在 Postgresql 中增加值

python manage.py syncdb 失败,出现 "ImproperlyConfigured: No module named ' psycopg2'

php - 如何按工作时间选择来电、接听、优惠、费率等?

php - 将 Mysql 查询解析为 Select unique from id 和 order by date accing

mysql - 使用随机唯一数字更新 SQL 表

php - Mysql从一个表中选择并插入到另一个表中

json - json.RawMessage 编码(marshal)