【问题标题】:Rails - Search POstgres JSONB column based on keyRails - 根据键搜索 POstgres JSONB 列
【发布时间】:2019-12-09 09:31:23
【问题描述】:

我有一个带有 denom_qty jsonb 列的表 abcs。存储的值将采用格式

{"100"=>5, "1000"=>2}

我想过滤 denom_qty 列具有键 >= 给定值(例如 100)的所有行。

我知道如果数据是以格式存储的

{ "面额" => 100, "数量"=> 2}。然后我找到了多个答案。但是由于现在无法更改数据结构,如何查询所有 denom_qty 列的键大于 100 的行?

【问题讨论】:

  • 所有记录的键是标准的吗?
  • 不,它们是动态的。
  • 这在 Rails 中不可行吗?

标签: ruby-on-rails postgresql rails-activerecord


【解决方案1】:

我认为您可以根据 json 键值创建一个函数并检查是否存在大于 100 的键。 例如。

create function jsonkey( inpt jsonb)
returns jsonb
LANGUAGE 'plpgsql'
COST 100
VOLATILE 
AS $BODY$
DECLARE
keyobj text[];
BEGIN
select array_agg(a.data) from(select jsonb_object_keys('{"100":5, "1000":2, "5":41}'::jsonb) as data )a into keyobj;

For i in select (keyobj)
LOOP
    if(i >=100) THEN
        return '{"100":5, "1000":2, "5":41}'::jsonb->>i;
    ELSE
        return '{}'::josnb;
    END IF;

END LOOP;

END;
$BODY$;

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2018-05-19
    • 2020-07-23
    • 2020-05-13
    • 2020-05-03
    相关资源
    最近更新 更多