我有一个简单的查询来检查 jsonb 对象中是否存在 key
SELECT data->$1 jdata FROM "my-scheme"."my-table"
我在这个查询中遇到了 2 个问题:
1) 如果我将 'foo'
作为 $1
传递,它会正常工作,但会因 "'foo'"
和 "而失败'foo'->'bar'”
。所以我不知道如何达到深键。我使用 node-postgres
2) 我只想检查 key 是否存在,而不是通过该 key 获取所有数据。
所以问题是:如何在不通过该键获取所有数据的情况下检查键是否存在于 jsonb 对象深处?
最佳答案
您可以使用 #>
运算符提取特定路径(指定为键数组)的元素。
您还可以通过 ?
运算符检查顶层是否存在 key ,尽管似乎没有接受路径的任何变体。
所以这些中的任何一个都可以做到:
SELECT '{"a":{"b":{"c":1}}}'::jsonb #> '{a,b}' ? 'c'
SELECT '{"a":{"b":{"c":1}}}'::jsonb #> '{a,b,c}' IS NOT NULL
第二个可能更有效一些,因为它避免了在将运算符链接在一起时构造中间 jsonb
值。
关于node.js - 检查 PostgreSQL v9.5+ 中的 jsonb 对象内部是否存在键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35749767/