如何查询带有数组的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字段的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历 JSONb 字段中包含的数组?

如何使用 sqlalchemy 查询 jsonb 数组

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段

如何在 Django 1.9 中查询复杂的 JSONB 字段

如何在 Vapor/Fluent 中正确查询 Postgres JSONB 字段

从带有 WHERE 子句的 JSONB 字段中选择