2017-10-07 6 views
1

私は現在、Twitterのキャッシュタグを表すJSONオブジェクトの列を含むテーブルを持っています。たとえば、これは私の元のクエリpostgreSQL:jsonb traversal

されています:

SELECT 
DATA->'id' as tweet_id, 
DATA->'text' as tweet_text, 
DATA->'entities'->'symbols' as cashtags 
FROM documents 
LIMIT 10 

cashtags列がために、私は、jsonbとしてリストされているこのデータ型を、トラバースするにはどうすればよい

[{"text":"HEMP","indices":[0,5]},{"text":"MSEZ","indices":[63,68]}] 

のようなものを返します。テキストがHEMPまたはMSEZと等しい場合にのみ結果を返します。

答えて

1

data->'entities'->'symbols'はjson配列です。

SELECT DISTINCT 
    data->'id' as tweet_id, 
    data->'text' as tweet_text, 
    data->'entities'->'symbols' as cashtags 
FROM documents, 
jsonb_array_elements(data->'entities'->'symbols') 
WHERE value->>'text' in ('HEMP', 'MSEZ'); 

tweet_id | tweet_text |         cashtags         
----------+------------+------------------------------------------------------------------------------ 
1  | "my_tweet" | [{"text": "HEMP", "indices": [0, 5]}, {"text": "MSEZ", "indices": [63, 68]}] 
(1 row) 
:あなたは機能 jsonb_array_elements(),例えば:

SELECT 
    data->'id' as tweet_id, 
    data->'text' as tweet_text, 
    value as cashtag 
FROM documents, 
jsonb_array_elements(data->'entities'->'symbols') 
where value->>'text' in ('HEMP', 'MSEZ'); 

tweet_id | tweet_text |    cashtag     
----------+------------+--------------------------------------- 
1  | "my_tweet" | {"text": "HEMP", "indices": [0, 5]} 
1  | "my_tweet" | {"text": "MSEZ", "indices": [63, 68]} 
(2 rows) 

かを使用して、配列をネスト解除することができます

関連する問題