postgresql - postgres如何比较jsonb数组和数组
问题描述
这是我的 JONB 数据
contact:{
"name": "Jonh",
"country": ["USA", "UK"],
}
我的查询:
SELECT * FROM public.product where contact -> 'country' = ARRAY['USA','UK'];
执行了查询并得到了这个ERROR: operator does not exist: jsonb = text[]
那么我该如何解决这个错误呢?
解决方案
您需要将其与 JSONB 数组进行比较:
select *
from product
where contact -> 'country' = '["USA","UK"]'::jsonb;
但这取决于数组中元素的顺序。如果您想测试所有键而不考虑顺序,则?&
操作员可能会更好:
where contact -> 'country' ?& array['UK','USA']
但是,这也会返回包含数组中其他元素的行。如果您需要完全匹配所有元素而不管顺序如何,您可以使用该@>
运算符两次:
where contact -> 'country' @> '["USA","UK"]'::jsonb
and contact -> 'country' <@ '["USA","UK"]'::jsonb
推荐阅读
- python-3.x - 为什么代码 > if 3 == 1 or 2: print('A') else: print('B') < print A but not B
- php - 在高级自定义字段中的组内迭代组
- r - 将变量与 r 中的多个变量相关联
- blockchain - 在测试网络上部署 2 个 RaspberryPi 并将它们链接到智能合约
- ruby - Ruby:使用“puts”时性能受到严重影响
- kotlin - 带有 ReactiveMongoRepository 的 Spring Data:通用保存
- reactjs - SetState 不是函数,并且已进行“绑定”
- c# - 我是否应该从我拥有的一些代码编写一个库,这些代码可能跨项目需要?
- reactjs - 当显示 2 层深度的路线时如何隐藏底部选项卡
- d3.js - DC.js - 序数比例折线图的自定义排序