我使用postgresql11.8和facetask,在这里我需要为产品保存许多尺寸,并且需要按尺寸搜索。以前有结构没有嵌套,只有一层,没有乘法 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
可以包含值 38
或价值 4
?
2条答案
按热度按时间vojdkbi01#
您可以将搜索到的值放入文本数组中,并使用
?|
操作员:这将检查操作符左侧的嵌套jsonb数组是否包含右侧文本数组中的任何值。
如果希望jsonb数组包含所有目标值,那么使用
?&
而不是?|
.h9a6wy2h2#
这个
@>
操作符也处理嵌套结构。要检查数组是否包含38或4,可以使用要检查数组是否同时包含这两个元素,可以使用