2017-08-04 19 views
0

Postgresデータベースを使用している私のRails 5アプリケーションではPostjsonbというカラムがあり、commentsというカラムがあります。 commentsのデフォルト値は{}です。Rails 5とPostgreSQLのjsonbカラムの完全一致の問い合わせ

commentsのデフォルト値を持つpostsの数を返信したいと思います。

​​を実行すると、Postテーブルのすべてのレコードがカウントされます。

正確な一致のみを返すクエリがあるので、コメントがないpostsの番号を知ることができますか?

答えて

0

Postgresデータベースを搭載した私のRails 5アプリケーションでは、jsonbという名前のPostという名前のPostというコメントがあります。コメントのデフォルト値は{}です。

のは、これがあなたのテーブルであるとしましょう:

CREATE TABLE Posts 
(
    post_id SERIAL PRIMARY KEY, 
    comments jsonb DEFAULT '{}' /* or json instead of jsonb */ 
) ; 

...いくつかのサンプルデータ

INSERT INTO Posts 
    (comments) 
VALUES 
    ('{"something": "a comment"}'), 
    ('[{"something": "a comment"}, {"something":"another comment"}]'), 
    (DEFAULT), 
    ('{}'), 
    (DEFAULT), 
    (NULL) ; 

...それは次のようになります。

SELECT * FROM Posts; 
 
post_id | comments              
------: | :------------------------------------------------------------- 
     1 | {"something": "a comment"}          
     2 | [{"something": "a comment"}, {"something": "another comment"}] 
     3 | {}                
     4 | {}                
     5 | {}                
     6 | null               

コメントの既定値を持つ投稿の数を返したいと思います。

これは{}で(平等)comments列を比較するのと同じくらい簡単です:

SELECT 
    count(*) 
FROM 
    posts 
WHERE 
    comments = '{}' /* or '{}'::jsonb */ 
 
| count | 
| ----: | 
|  3 | 

dbfiddle here


私が持っている私の推測(試していない)は、これをレールに変換することです:

Post.where("comments = ?", {}.to_json).count 
関連する問題