簡體   English   中英

Rails和Postgres,按hstore分組

[英]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)

有關JSONB和Postgresql的良好資源

hstore列不允許使用嵌套結構; 它們還將所有值存儲為字符串,這將需要在數據庫層和應用程序層上進行類型強制轉換。 使用json / jsonb列,您就不會遇到這個問題; 數字(整數/浮點數),布爾值,數組,字符串和null都是可以接受的,甚至您可以按任何需要嵌套結構。

建議您停止使用hstore來支持jsonb; 只要記住您必須使用PostgreSQL 9.4+才能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM