node.js - 检查 PostgreSQL v9.5+ 中的 jsonb 对象内部是否存在键

标签 node.js postgresql postgresql-9.5

我有一个简单的查询来检查 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/

相关文章:

node.js - 使用Jasmine的spyOn/andReturn来模拟fs.readFileSync()

javascript - Jade : ReferenceError: TokContext is not defined

python - 永远防止启动重复进程

postgresql - Postgresql RULE 中不执行 VOLATILE 函数和 INSERTS

postgresql - 没有错误,无限加载 : where should I search?

postgresql - 将用户限制在 PostgreSQL 中的一个模式?

javascript - 如何在 Node.js 应用程序中使用 sql-injection 包?

sql - postgresql 的查询优化

PostgreSQL 10 使用枚举按列表分区

postgresql - 尝试更新 Postgres 表中的 JSON 但出现未知错误