如何在PostgreSQL API中基于多语言过滤数据?

问题描述 投票:0回答:1

我正在构建一个 API,需要根据语言过滤数据。当使用 { "language": ["Hindi", "English"] } 之类的请求进行过滤时,我想检索与两种语言匹配的行,但只能采用 "language": ["Hindi", "English"] 格式.

但是,我的数据包含变化。例如:

一行:“语言”:[“英语”,“印地语”,“旁遮普语”] 另一行:“语言”:[“英语”,“印地语”] 我想以所需的格式发送两行:“语言”:[“英语”,“印地语”]。重要的是,我想通过查询来实现这一点,而不是修改控制器文件。

Data: {
    "id": 169,
    "status": 1,
    "from_time": "10:30:00",
    "to_time": "19:30:00",
    "created_at": "2023-11-03 18:05:16",
    "updated_at": "2024-03-31 18:11:43",
    "language": ["English", "Hindi", "Punjabi"]
},
{
    "id": 817,
    "status": 1,
    "from_time": "10:00:00",
    "to_time": "17:30:00",
    "created_at": "2024-03-29 17:31:26",
    "updated_at": null,
    "language": ["English", "Hindi"]
}

查询尝试:

SELECT *
FROM tbl_lang
WHERE language ->> 0 = 'Hindi' AND language ->> 1 = 'English'

我想发送两行,但只喜欢“语言”:[“英语”,“印地语”]。我不想发送像这样的“语言”:[“英语”,“印地语”,“旁遮普语”]这样的数据或像这样的“语言”:[“英语”,“印地语”]的另一种数据。

这可能吗?如果是这样,有人可以提供 PostgreSQL 查询来实现这一点吗?

json database postgresql api filtering
1个回答
0
投票

如果您的列是

jsonb
类型,您可以使用
?&
运算符:demo

select jsonb_pretty(data) from tbl_lang
where (data->'language') ?& array['English', 'Hindi'];
jsonb_pretty
{
    “id”:169,
    “状态”:1,
    “to_time”:“19:30:00”,
    “语言”:[
        “英语”,
        “印地语”,
        “旁遮普语”
],
    "from_time": "10:30:00",
    "created_at": "2023-11-03 18:05:16",
    "updated_at": "2024-03-31 18:11:43"
}
{
    “id”:817,
    “状态”:1,
    “to_time”:“17:30:00”,
    “语言”:[
        "英语",
        "印地语"
    ],
    "from_time ": "10:00:00",
    "created_at": "2024-03-29 17:31:26",
    "updated_at": null
}
© www.soinside.com 2019 - 2024. All rights reserved.