首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查询Rails中嵌套的JSONB postgres

如何查询Rails中嵌套的JSONB postgres
EN

Stack Overflow用户
提问于 2022-05-24 05:57:15
回答 2查看 243关注 0票数 0

我有一个名为Order的表,其中有一个名为line_itemsjsonb列类型。line_items列可以包含以下嵌套值:

代码语言:javascript
运行
复制
[
  {
    "id":9994857545813,
    "sku":"CLIPPING-PATH_C2_24H",
  },
  {
    "id":9994857578581,
    "sku":"NATURAL-SHADOW_C1_24H",
  }
]

上面的示例中有两个行项,但它可以从1到任意数量的行项不等。

我需要查询所有只包含1行项的订单,其中sku =一个特定的值,如上面的示例所示的CLIPPING-PATH_C2_24H

因此,查询不应该与上面的示例匹配,但是下面的示例只有一行项和sku=CLIPPING_C2_24H

代码语言:javascript
运行
复制
[
  {
    "id":9994857545813,
    "sku":"CLIPPING-PATH_C2_24H",
  }
]

使用Rails活动记录编写查询有任何帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2022-05-24 07:47:12

演示

您可以在ruby(如何从rails调用plpgsql函数?)中调用plpghsql。

sql查询:select jsonb_path_query(order_json,'$[*] ? (@.sku == "CLIPPING-PATH_C2_24H")') from orders ;

要正确处理它并不容易,因为PL/pgsql函数字符串的某些部分甚至包括4个单引号。最好用提神通知一步一步地测试。

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION get_sku_CLIPPING_path (_sku text)
    RETURNS json
    AS $$
DECLARE
    _sql text;
    _returnjson jsonb;
BEGIN
    RAISE NOTICE '%: _sku', $1;
    RAISE NOTICE '%', '$[*] ? (@.sku == ' || $1 || ')';
    RAISE NOTICE '%', $s$
    SELECT
        jsonb_path_query(order_json, $s$ || '''' || '$[*] ? (@.sku == ' || $1 || ')''' || ' from orders';
    _sql := $s$
    SELECT
        jsonb_path_query(order_json, $s$ || '''' || '$[*] ? (@.sku == ' || $1 || ')''' || ' )from orders';
    EXECUTE _sql
    USING _sku INTO _returnjson;
    RETURN (_returnjson::json);
END
$$
LANGUAGE plpgsql;

叫它:select * from get_sku_CLIPPING_path('"CLIPPING-PATH_C2_24H"');

票数 0
EN

Stack Overflow用户

发布于 2022-05-25 08:13:33

我能够使用jsonb_array_length方法找出这一点:

代码语言:javascript
运行
复制
Order
.where("line_items @> ?", [{sku: sku}].to_json)
.where("jsonb_array_length(line_items) = 1")
.count
end

以下资源非常有用:https://gist.github.com/mankind/1802dbb64fc24be33d434d593afd6221

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72357820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档