认真努力想出一个合理的范围。Rails:在postgresql数据库中搜索数组json字段
我想获得一个模型列表,其中使用postgresql的json数组列中有一个特定的“类型”字段。
有人可以指出我在正确的方向,我也很好,这是一个类级别的方法,而不是范围,我只需要一个所有Model.objects的列表。
主要模式是提交,其HAS_ONE:fmp_session - FmpSession具有场:project_data,这是PostgreSQL:JSON类型字段,包含一个JSON阵列。
因此,如果fmp_session.project_data'type'json键等于'CREW',我想要的是所有提交的活动记录数组。
我宁愿坚持使用activerecord或sql(或混合搭配),只留下AREL。
我的想法是这样的:
Submission.joins(:fmp_session).where(
'EXISTS(
SELECT 1 from json_array_elements(
"project_data"
) project_data WHERE (
project_data#>> "{type}"
) = "CREW"
)'
)
从理论上讲,这将搜索project_data阵列,并以#搜索它>>所以不要紧多少元素数组中 - 但我已经尝试了近40个查询的阴谋,并被卡住了。帮助我找到正确的查询将一个表连接到另一个表并搜索json数组字段以获取特定字符串。
UPDATE
要显示数据库部,这里是表描述(在psql)和该表的所述schema.db段。此外,你应该知道
Column | Type |Modifiers
---------------+-----------+-----------------------------------------------------------
id | integer | not null default nextval('fmp_sessions_id_seq'::regclass)
project_data | json | default '[]'::json
和架构
create_table "fmp_sessions", force: :cascade do |t|
t.json "project_data", default: []
t.json "project_member_data", default: []
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
如果我理解你很好,你的DB中有JSON(保存为文本?),对吧? – Jeremie
如果你问它的数据类型是文本,那么不,它是JSON,我使用的PostgreSQL 9.6与json类型字段(技术上是文本,是的,但它们被规定为json或json数组) – trh