如何查询 PostgreSQL 9.5 JSONB 列中是否存在某个键?
How to query the existence of a key in PostgreSQL 9.5 JSONB column?
我有一个 PostgreSQL 9.5 数据库 table,其中有一个名为 attrs 的 JSONB 列。我想检查该 attires 列中是否存在特定键。我想我可以使用?运算符,但我不明白语法。
SELECT * FROM cereal WHERE attrs ? 'lbs';
这个returns,"The number of minded parameters < the number of parameter markers."
SELECT * FROM cereal WHERE attrs ? | ARRAY['lbs'];
这个returns,"The number of minded parameters < the number of parameter markers."
如何查询 JSONB 列中是否存在键?
您的第一个查询确实准确无误。
?
运算符确实有一个限制,即它只检查 jsonb
值的顶级键。因此,您要查找的密钥很可能深埋在 JSON 文档中的某处。您可以使用多个 jsonb
运算符或处理函数来向下钻取键应该位于的位置,然后进行测试:->
、#>
、jsonb_each()
或 jsonb_array_elements()
,等等。所以你在结果上使用任何这些和 运行 ?
运算符,比如:
SELECT *
FROM cereal
WHERE (attrs -> 'weight') ? 'lbs';
...对于 JSON 文档,如:
{"ingredients": {...}, "weight": {"lbs": 4, "kg": 1.8}, ...}
如果不了解您的 JSON 文档的结构,您将无法获得更具体的答案。
这不是 postgresql 错误。您的查询很好。错误是你的,无论你使用什么 运行 该查询都会混淆 ?
参数占位符,你必须修复你尝试 运行 查询的方式,而你没有'提供足够的信息给你一个提示。
我有一个 PostgreSQL 9.5 数据库 table,其中有一个名为 attrs 的 JSONB 列。我想检查该 attires 列中是否存在特定键。我想我可以使用?运算符,但我不明白语法。
SELECT * FROM cereal WHERE attrs ? 'lbs';
这个returns,"The number of minded parameters < the number of parameter markers."
SELECT * FROM cereal WHERE attrs ? | ARRAY['lbs'];
这个returns,"The number of minded parameters < the number of parameter markers."
如何查询 JSONB 列中是否存在键?
您的第一个查询确实准确无误。
?
运算符确实有一个限制,即它只检查 jsonb
值的顶级键。因此,您要查找的密钥很可能深埋在 JSON 文档中的某处。您可以使用多个 jsonb
运算符或处理函数来向下钻取键应该位于的位置,然后进行测试:->
、#>
、jsonb_each()
或 jsonb_array_elements()
,等等。所以你在结果上使用任何这些和 运行 ?
运算符,比如:
SELECT *
FROM cereal
WHERE (attrs -> 'weight') ? 'lbs';
...对于 JSON 文档,如:
{"ingredients": {...}, "weight": {"lbs": 4, "kg": 1.8}, ...}
如果不了解您的 JSON 文档的结构,您将无法获得更具体的答案。
这不是 postgresql 错误。您的查询很好。错误是你的,无论你使用什么 运行 该查询都会混淆 ?
参数占位符,你必须修复你尝试 运行 查询的方式,而你没有'提供足够的信息给你一个提示。