PG数据库的Jsonb全文检索查询

7,516次阅读
没有评论

共计 1869 个字符,预计需要花费 5 分钟才能阅读完成。

1. 操作键值对

PostgreSQL 对 jsonb 类型的筛选查询可以使用 -> 或者 ->> 操作符。

  • -> 操作符用于通过 JSON 对象中的键来获取对应的值。
  • ->> 操作符可以将获取到的值 提取出来 转化为字符串类型。

例如,下面是一个包含 jsonb 类型字段的表:

CREATE TABLE test (
  id SERIAL PRIMARY KEY,
  data JSONB
);
 
INSERT INTO test (data) VALUES ('{"name":"John","age": 30,"city":"New York"}');
INSERT INTO test (data) VALUES ('{"name":"Jane","age": 25,"city":"Los Angeles"}');

我们可以通过下面这中查询方式进行全库的全文检索查询

-- 获取所有数据
SELECT * FROM test;
 
-- 根据 jsonb 字段中的键值进行查询
SELECT * FROM test WHERE data -> 'name' = '"John"';
-- 注意:键名需要用单引号括起来,并且值需要用双引号括起来。-- 使用 ->> 将键对应的值提取出来进行查询
SELECT * FROM test WHERE data ->> 'age' = '30';

上面这个提取出来的例子可能不明显

下面添加一个复杂的 json 例子

{
    "caseInfo": {
        "caseNo": "C20xxxxxxxxx8212566",
        "reportNo": "P2xxxxxxxxxxxxxxxxx3004",
        "applyTime": 17xxxxxxxxx5000,
        "companyId": 1xx00,
        "treatType": "1",
        "createFrom": 1xxx1,
        "companyName": "中国 xxxxxxxxxxx 公司",
        "processType": "2xx",
        "accidentDate": 171xxxxxxxx1000,
        "accidentType": "xx1x",
        "hospitalCode": "xxxxxxxxx35",
        "hospitalName": "台 xxxxxxxxxxxx 院",
        "hospitalLevel": "","medicalFinish":"",
        "firstCompanyId": 0987654,
        "injuredFromArea": "ytgrefds",
        "insuranceTypeId": "","firstCompanyName":" 中 xxxxxxxxxxxx 限公司 ","hospitalAttribute":"",
        "uploadUserOrgCode": "","totalSettlementAmount": 0
    },
    "patientInfo": {
        "name": "邱 76y5t432",
        "idCard": "33sacdvfgbdcs1232675",
        "address": "asadfghfdsa 村",
        "birthday": sadcsxazxsc000,
        "cardType": "asdsad",
        "idDueDay": 2asxcv bgdfsc000,
        "genderCode": "1"
    },
    "applyUserInfo": {
        "nationality": "CHN",
        "applyUserName": "","applyUserIdCard":"",
        "applyUserBirthday": "","applyUserCardType":"",
        "applyUserIdDueDay": "","applyUserGenderCode":"",
        "applyUserPatientRelation": ""
    }
}

这个时候提取的作用就显得明显了很多

--  ->> 提取测试 sql, 将 applyUserInfo 下的 nationality 提取出来,做一维 sql 标准查询
SELECT count(*)
FROM case_service.cs_case_model
WHERE (cs_case_model.case_model_detail -> 'applyUserInfo' ->> 'nationality') like '%C%';

结果:

原文地址: PG 数据库的 Jsonb 全文检索查询

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-10发表,共计1869字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)