首页 > 解决方案 > Postgres typeorm将单个值与字符串列表jsonb进行比较

问题描述

我一直在尝试将字符串值与动态字符串数组进行 jsonb 比较以使其正常工作,但所有尝试都徒劳无功

PS:别管表名和不同的列,它们仅用于本地测试

我有一个 test-FAQS 表,其中有 "question" "questionNo" "questionVector" 这是 tsvector(questionNo) 和两个 jsonb 列 - "metadata" , "fullDocument"

暂时省略完整的文档详细信息,因此元数据列有很多键值对,只列出我正在尝试使用的键值对,{"docId": , "bu": , "subBu": }。同样,所有这些都是字符串,
这就是我要尝试的 - 使用 ts_query 实现基于文本的搜索,并确保它与用户输入的 bu 和 subBu 名称匹配。现在用户可以输入一个 subBu 数组,这就是我苦苦挣扎的地方。我目前已经实现了这些查询,现在它们是普通查询

这有效 - 获取具有给定上下文的意图文档,并仅与客户发送的 BuName 匹配

SELECT "A"."question", "A"."questionNo"  FROM  "test-FAQS" as "A"  
WHERE "A"."fullDocument"::jsonb @> '{"businessUnit": "WI-BusinessUnit"}' AND to_tsquery('jump & fox')

现在,如果我尝试合并另一个子句来限制基于 subBusinessUNIts 的搜索 - subBu 名称作为数组从用户获得,则查询不起作用。

SELECT "A"."question", "A"."questionNo", "A"."fullDocument"::jsonb #> '{subBusinessUnit}'  FROM  "test-FAQS" as "A"
WHERE "A"."fullDocument"::jsonb @> '{"businessUnit": "WI-BusinessUnit"}' AND to_tsquery('jump & fox') AND "A"."fullDocument"::jsonb @@ '$.subBusinessUnit[*] IN ARRAY["subBu1", "subBu2"]' 

我在这里查看了 jsonb 运算符的 PostgresDocs,但无法找出用于将特定 json 键的值与 array 进行比较的那个。这里有什么建议?

标签: postgresqltypeormjsonbpostgresql-13

解决方案


推荐阅读