【问题标题】:Check if Postgres JSON multidimensional array contains specific string value检查 Postgres JSON 多维数组是否包含特定的字符串值
【发布时间】:2022-11-24 18:16:05
【问题描述】:

再会,

我在 S.O 上找到了几个解决方案,这些解决方案与查找其 JSON 列具有指定值的行有关。

我目前面临的问题是我的特定 JSON 列 (session_data) 包含一个多维数组,具有一个或多个值:

{
    "lastMessages": [
        {
            "eventId": "1",
            "replyDate": "2022-11-23T05:47:18.577Z",
            "replyPreview": "response-text-a"
        },
        {
            "eventId": "2",
            "replyDate": "2022-11-23T05:48:14.550Z",
            "replyPreview": "response-text-b"
        },
        {
            "eventId": "3",
            "replyDate": "2022-11-23T06:23:53.234Z",
            "replyPreview": "response-text-c"
        },
        {
            "eventId": "4",
            "replyDate": "2022-11-23T06:24:13.555Z",
            "replyPreview": "response-text-d"
        },
        {
            "eventId": "5",
            "replyDate": "2022-11-23T06:24:30.919Z",
            "replyPreview": "response-text-z"
        }
    ],
    "workflows": {},
    "slots": {}
}

我将如何从 JSON 列数组的 replyPreview 属性包含值 response-text-z 的表中检索所有行?

我试过以下方法:

SELECT * FROM dialog_sessions WHERE (session_data->'lastMessages')::jsonb ? 'response-text-z' LIMIT 100

然而无济于事。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以使用 JSON 路径表达式:

    select *
    from dialog_sessions 
    where session_data @? '$.lastMessages[*].replyReview == "response-text-z"'
    

    如果您使用的是较旧的 Postgres 版本,则可以尝试使用 @> 运算符:

    select *
    from dialog_sessions 
    where session_data -> 'lastMessages' @> '[{"replyPreview": "response-text-z"}]'
    

    DbFiddle using Postgres 11

    【讨论】:

    • 感谢您的及时回复。尝试查询时,出现以下错误:错误:运算符不存在:json @?未知
    • @RookieSA:那么您使用的是较旧的 Postgres 版本。请参阅我的编辑以获取替代方案
    • 感谢您的选择。我已经尝试了你的建议,但这似乎也返回了一个错误,说明运算符“@>”不存在。我使用 v11.17 是因为它与 Windows Server 2012 R2 兼容。
    • 好吧,运营商@ 确实不存在。但是我用了@>
    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2010-11-16
    • 2013-01-12
    • 1970-01-01
    • 2020-09-16
    • 2021-04-18
    相关资源
    最近更新 更多