[英]Rails and Postgres, group by hstore
我有一個具有名稱:string和數據:hstore屬性的“審核”模型-如下:
#<Audit
id: 1,
name: "my audit",
data: {"publisher"=>"some publisher", "display_version"=>"17.012.20098"},
created_at: "2017-10-10 13:09:56",
updated_at: "2017-10-10 13:09:56">
我想生成一個包含3列的報告:名稱,display_version,計數
為此,我假設我需要按“名稱”和“數據->'display_version'”分組
我正在努力查詢和AR語法。
到目前為止,我有:
Parent.audits.group(:name, :data -> 'display_version)'
即使這樣也不行。 有人可以幫忙嗎? 我搜索了沒有運氣的例子。
你可以通過包含SQL分組表達式為字符串group
,所以你可以說:
Parent.audits.group(%q{name, data -> 'display_version'})
要么:
Parent.audits.group(%q{audits.name, audits.data -> 'display_version'})
然后,您可以在最后拋出#count
調用以獲取所需的數據:
Parent.audits.group(%q{name, data -> 'display_version'}).count
使用jsonb
代替hstore
(出於多種原因)
名稱:字符串和數據:jsonb的“審計”模型
Audit.rb
store_accessor :data, :publisher, :display_version
然后嘗試:
Parent.audits.pluck(:name, :publisher, :display_version)
hstore列不允許使用嵌套結構; 它們還將所有值存儲為字符串,這將需要在數據庫層和應用程序層上進行類型強制轉換。 使用json / jsonb列,您就不會遇到這個問題; 數字(整數/浮點數),布爾值,數組,字符串和null都是可以接受的,甚至您可以按任何需要嵌套結構。
建議您停止使用hstore來支持jsonb; 只要記住您必須使用PostgreSQL 9.4+才能工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.