如何查询带有数组的jsonb字段
Posted
技术标签:
【中文标题】如何查询带有数组的jsonb字段【英文标题】:how to query jsonb field with arrays inside 【发布时间】:2018-04-17 11:57:55 【问题描述】:我有一个 jsonb 字段,它有一个像这样的数组
["odd_id"=>"5328", "team_id"=>"", "event_id"=>"10301952", "odd_type"=>"full_time", "odd_label"=>"X", "odd_value"=>"3.29", "odd_id"=>"5349", "team_id"=>"", "event_id"=>"10299004", "odd_type"=>"full_time", "odd_label"=>"X", "odd_value"=>"3.10", "odd_id"=>"5237", "team_id"=>"2554", "event_id"=>"2020445", "odd_type"=>"full_time", "odd_label"=>"1", "odd_value"=>"2.87", "odd_id"=>"5174", "team_id"=>"669", "event_id"=>"1685560", "odd_type"=>"full_time", "odd_label"=>"2", "odd_value"=>"3.39"]
我想使用 where 来查询列中的 event_id。 顺便说一句,我正在使用 Rails 5 和 PostgreSQL,有人可以指导我如何存档。
【问题讨论】:
【参考方案1】:假设您使用 jsonb 字段 test_field
建立了名为 Test
的模型,其中一个特定值是哈希数组,如下所示:
["odd_id"=>"5328", "team_id"=>"", "event_id"=>"10301952", "odd_type"=>"full_time", "odd_label"=>"X", "odd_value"=>"3.29", "odd_id"=>"5349", "team_id"=>"", "event_id"=>"10299004", "odd_type"=>"full_time", "odd_label"=>"X", "odd_value"=>"3.10", "odd_id"=>"5237", "team_id"=>"2554", "event_id"=>"2020445", "odd_type"=>"full_time", "odd_label"=>"1", "odd_value"=>"2.87", "odd_id"=>"5174", "team_id"=>"669", "event_id"=>"1685560", "odd_type"=>"full_time", "odd_label"=>"2", "odd_value"=>"3.39"]
你必须像这样查询数据库:
Test.where('test_field @> ?', [ 'event_id' => '10301952' ].to_json)
【讨论】:
@geniuskidkanyi 我以为它只是一个 json,没有看到数组。根据您的需要编辑答案。以上是关于如何查询带有数组的jsonb字段的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段
如何在 Django 1.9 中查询复杂的 JSONB 字段