我正在使用JSONB列,其中数据存储为{键=> [值,值,值]} 我该如何编写一个范围来返回包含特定键数组中的特定值的记录?
我已经找到了如何搜索简单的JSON哈希;
scope :rice_flour, -> { where("ingredients ->> 'flour' = ?", "rice") }
...但是此查询类型仍然使我无法逃脱。我所查找的所有内容都将其放置在原始SQL命令中,并且我正在寻找如何编写整洁的Rails Scopes。
答案 0 :(得分:1)
使用@>
运算符:
postgres@/> select '["a", "b"]'::jsonb @> '["a"]';
+------------+
| ?column? |
|------------|
| True |
+------------+
postgres@/> select '["a", "b"]'::jsonb @> '["c"]';
+------------+
| ?column? |
|------------|
| False |
+------------+
https://www.postgresql.org/docs/10/functions-json.html
您的范围将如下:
scope :rice_flour, -> {
.where("ingredients -> 'flour' @> '[\"rice\"]'::jsonb")
}
这将生成一个SQL,如:
WHERE (ingredients -> 'flour' @> '["rice"]'::jsonb)
假设flour
是键,而rice
是数组中的值之一。