認真努力想出一個合理的範圍。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