2017-03-01 7 views
1

私のRails 5アプリケーションでは、問い合わせ方法がわからないjsonbフィールド(properties)を使用するAhoy gemを使用しています。Rails - JSONフィールドのクエリ

propertiesフィールド内のデータのサンプル:私は何をしようとしている

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

は次のとおりです。

  1. timeフィールドを使用して(過去7日間に作成されたレコードを探します)
  2. propertiesフィールドにidのレコードをグループ化する
  3. wh ICH idは、ほとんどのレコードを

私はこの試みた持っていた:私は宝石のための問題で、このsomewhat similar questionを見つけ

PG::UndefinedColumn: ERROR: column "properties(id)" doe not exist

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

をしかし、私はエラーを受け取ったが、ので、私は壊してみました部品へのクエリ:

@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:ERROR:column" ahoy_events.id "がGROUP BY句に現われなければならないか、集約関数で使用されなければならないでしょう。 – yellowreign

+0

それは分かります。詳細は、このリンク(http://bernardoamc.github.io/sql/2015/05/04/group-by-non-aggregate-columns/)を参照してください。ユースケースごとにクエリを変更することができます。しかし、いずれの場合でも、jsonbカラムでクエリを実行する場合は、 '' '' properties - >> 'id''''を使う必要があります。 –

関連する問題