sql - Postgres如何查找jsonb类型列中包含键和数组的行,其中包含一些带有或条件的值
问题描述
我使用 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"}
如何为带有条件的SIZE
键搜索构建搜索查询。OR
喜欢搜索所有SIZE
可以包含 value38
或 value的地方4
?
解决方案
@>
运算符也适用于嵌套结构。要检查数组是否包含 38 或 4,可以使用
products_alias.extras @> '{"SIZE":["4"]}' OR products_alias.extras @> '{"SIZE":["38"]}'
要检查数组是否包含两者,您可以使用
products_alias.extras @> '{"SIZE":["4","38"]}'
推荐阅读
- db2 - 在 db2 中运行 LOAD 实用程序后的 RUNSTATS
- reactjs - 如何根据状态更新 react-i18next 语言?
- python - 为什么'Traceback(最近一次通话最后一次):文件“
",第 1 行,在 ImportError:我尝试安装 django 时没有名为 django 的模块? - html - 用 div 元素覆盖视频元素
- android - 当我运行我的应用程序时,我遇到了这个问题
- pytorch - 使用 pytorch 应用简单的转换来获得二值图像
- javascript - 如何从 localStorage 中的对象数组中访问值
- ruby-on-rails - 无法显示阵列中的单个图像(Rails 活动存储)
- python - depth_err 在 astropy.timeseries.BoxLeastSquaresResults 中是什么意思
- django - mongo_aggregate() 的 Djongo 映射器问题