【问题标题】:cockroachdb jsonb select querycockroachdb jsonb 选择查询
【发布时间】:2018-09-09 23:18:12
【问题描述】:

我在 CockroachDB v2.0-beta 中有一个简单的表:

CREATE TABLE account ( 
   id UUID NOT NULL DEFAULT uuid_v4()::UUID, 
   acct JSON NULL,
   CONSTRAINT "primary" PRIMARY KEY (id ASC),
   INVERTED INDEX account_acct_idx (acct),
   FAMILY "primary" (id, acct) 
) 

我可以运行选择查询来查找 acct->properties 下的特定属性,如下所示:

select acct->>'id' from account where acct @> '{"properties": {"foo": "bar"}}';

有没有办法选择 Json blob 的子集,例如嵌套属性?这样的事情会有所帮助:

select acct->>'id', acct->>'properties:description' from account 
    where acct @> '{"properties": {"foo": "bar"}}';

提前感谢您的任何提示!

干杯, ~g

【问题讨论】:

  • 我不听你的问题。你想得到什么输出,究竟是什么?没有什么可以阻止您对包含查询返回的 JSON blob 进行任意查找。

标签: jsonb cockroachdb


【解决方案1】:

正如 Jordan 在上面的评论中提到的,您已经可以使用您在问题中引用的运算符获取嵌套的 JSON 对象。使用您的示例,我可以按如下方式访问嵌套对象:

> CREATE TABLE account (
   id UUID NOT NULL DEFAULT uuid_v4()::UUID,
   acct JSON NULL,
   CONSTRAINT "primary" PRIMARY KEY (id ASC),
   INVERTED INDEX account_acct_idx (acct),
   FAMILY "primary" (id, acct)
);
CREATE TABLE

> INSERT INTO account (acct) VALUES ('{"properties": {"foo": "bar"}}');
INSERT 1

> SELECT * FROM account;
                   id                  |              acct
---------------------------------------+---------------------------------
  6fe08368-7720-4ddd-885e-75437b4e0267 | {"properties": {"foo": "bar"}}
(1 row)

> SELECT acct->>'properties' FROM account WHERE acct @> '{"properties": {"foo": "bar"}}';
     ?column?
------------------
  {"foo": "bar"}
(1 row)

请注意,->> 返回嵌套 JSON 对象的字符串表示形式。正如我们的JSON docs 中所述,运算符-> 可用于返回对象本身。如果您想访问更深的嵌套对象,这也允许您链接运算符。例如:

> select acct->'properties'->'foo' from account;
  ?column?
------------
  "bar"
(1 row)

【讨论】:

  • 嗨 Rebecca,SELECT 是否支持子级别的通配符?例如,这目前不起作用:select acct->'%'->'foo' from account;
  • 嗨@ElleFie,不,CockroachDB 目前不支持。 Postgres 似乎也不支持它。但正如this post 中所述,您可以使用 jsonb_each() 函数实现相同的目标,CockroachDB 和 Postgres 都支持该函数。
猜你喜欢
  • 2020-11-17
  • 2017-09-07
  • 2022-01-18
  • 2017-09-07
  • 2020-10-31
  • 2017-06-20
  • 2019-07-02
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多