![](/img/trans.png)
[英]How to find the key for the minimum value in jsonb column of postgres?
[英]Postgres how to find rows where in jsonb type column contains key with array which contain some value with or condition
我使用 PostgreSQL 11.8 并面临任务,我需要为产品保存许多尺寸并且也需要按尺寸搜索。 之前有没有嵌套的结构,只有一层,没有乘SIZE
键
{"SIZE": "98/104", "COLOUR": "Korall", "GENDER": "female", "CURRENCY": "SEK", "AGE_GROUP": "Kids", "ALTERNATIVE_IMAGE": "https://i1.adis.ws/i/Lindex/8016913_8414_PS_MF?w=300&h=300"}
并搜索我确实喜欢
WHERE ((products_alias.extras @> '{"SIZE":"One Size"}'
OR products_alias.extras @> '{"SIZE":"146/152"}')
AND (products_alias.extras @> '{"COLOUR":"Flerfärgat"}'
OR products_alias.extras @> '{"COLOUR":"Grå"}'
))
但现在我需要提供机会保存乘以SIZE
并为此重构搜索。 如果数据看起来像这样的示例
{"SIZE": ["38", "90", "12", "4"], "COLOUR": "Svart", "GENDER": "female", "CURRENCY": "SEK", "AGE_GROUP": "Adult", "ALTERNATIVE_IMAGE": "https://i1.adis.ws/i/Lindex/7962770_80_PS_MF?w=300&h=300"}
如何使用OR
条件构建按SIZE
键进行搜索的搜索查询。 就像搜索所有SIZE
可以包含值38
或值4
的地方?
@>
运算符也适用于嵌套结构。 要检查数组是否包含 38 或 4,可以使用
products_alias.extras @> '{"SIZE":["4"]}' OR products_alias.extras @> '{"SIZE":["38"]}'
要检查数组是否包含两者,您可以使用
products_alias.extras @> '{"SIZE":["4","38"]}'
您可以将搜索到的值放在文本数组中,然后使用?|
操作员:
where extras -> 'SIZE' ?| array['38', '4']
这将检查运算符左侧的嵌套 JSONB 数组是否包含右侧文本数组中的任何值。
如果您希望 JSONB 数组包含所有目标值,请使用?&
而不是?|
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.