Postgres模式与所有JSONB字段上的类似/Ilike匹配

发布于 2025-01-23 04:58:19 字数 612 浏览 0 评论 0原文

我的表格上有一个列,称为metadata(例如trips),该列是JSONB类型的。我想对元数据的所有值进行对匹配/搜索。

例如,元数据列的整个形式之一是:

{"city": "London", "trip_id": 2075209, "store_id": 108, "driver_id": 1166061,  "driver_name": "Jon Doe", "track_back_order": false}

我想以伦敦的城市获取所有记录。我尝试将元数据列投入我的中的文本中,其中子句

WHERE trips.metadata::TEXT ILIKE 'London'

返回0结果。

但是在字段级别上搜索有效,例如,子句返回适当的结果:

WHERE trips.metadata->>'city' ILIKE 'London'

但是,由于元数据列的键可以是任意的,因此我不能对每个字段进行上述查询。关于我如何解决这个问题的想法?

I have a column, called metadata on my table (say trips) which is of JSONB type. I'd like to pattern match/search on all values of metadata.

For example, one of the entires of the metadata column is of the form:

{"city": "London", "trip_id": 2075209, "store_id": 108, "driver_id": 1166061,  "driver_name": "Jon Doe", "track_back_order": false}

I'd like to fetch all records with city as London. I've tried to cast the metadata column into text in my WHERE clause with

WHERE trips.metadata::TEXT ILIKE 'London'

which returns 0 results.

But searching at a field level works, for example this WHERE clause returns the appropriate results:

WHERE trips.metadata->>'city' ILIKE 'London'

But since the keys of the metadata column can be arbitrary, I cannot do the above query for each field. Any ideas on how I can solve for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别在捏我脸啦 2025-01-30 04:58:19

Ilike喜欢没有任何通配符的与=相同。

因此 - 忽略案例灵敏度 - trips.metadata :: text Ilike'伦敦'基本上与trips.metadata :: text ='text ='伦敦'

显然没有工作。

如果您想在所有键上迭代:

where metadata @@ '$.* like_regex "London" flag "i"'  

ILIKE or LIKE without any wildcards is the same as =.

So - ignoring case sensitivity - trips.metadata::TEXT ILIKE 'London' is essentially the same as trips.metadata::TEXT = 'London'

Obviously that doesn't work.

You can use a JSON path expression if you want to iterate over all keys:

where metadata @@ '$.* like_regex "London" flag "i"'  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文