2017-03-01 71 views
1

在我的Rails應用程序5,我用它採用了jsonb場(稱爲properties),我不知道如何查詢Ahoy gem導軌 - 查詢JSON場

數據在properties領域的一個樣本:

"{\"id\":\"11\"}" 

我試圖做的是:

  1. 發現在過去七天內創建的記錄(使用time場)
  2. id中的記錄分組在properties字段中
  3. 根據wh命令記錄ICH id有最記錄

我嘗試這樣做:

@foo = Ahoy::Event.where(name: "Viewed Product").where(time: 7.days.ago..Time.now).group("properties(id)").order('COUNT("properties(id)") DESC') 

,但我收到的錯誤,PG::UndefinedColumn: ERROR: column "properties(id)" doe not exist

我發現這somewhat similar question在創業板的問題,所以我嘗試打破查詢到的部分:

@foo = Ahoy::Event.where(name: "Viewed Product").where(time: 7.days.ago..Time.now) 
@foo.group("properties REGEXP '[{,]\"id\"...).count 

但後來我的IDE給出了錯誤unterminated string meets the end of file

是否有人可以幫助我確定我做錯了什麼?

回答

0

如果您正在使用PostgreSQL,我相信,你將不得不參考JSON列如下: .group("properties ->> 'id'")

+0

是的,我看到一個帖子提的是。當我想,我收到'PG :: GroupingError:錯誤:列「ahoy_events.id」必須出現在GROUP BY子句或聚集function' – yellowreign

+0

這是可以理解使用。詳情請查看此鏈接(http://bernardoamc.github.io/sql/2015/05/04/group-by-non-aggregate-columns/)。您可能希望根據您的用例修改您的查詢。然而,在任何情況下,你將不得不使用'''性能 - >>「id''''如果您計劃在jsonb欄查詢。 –