簡體   English   中英

如何過濾json嵌套鍵的值

[英]How to filter a value of nested key of json

我在 PostgreSQL 有一張桌子

CREATE TABLE IF NOT EXISTS account_details
(
    account_id integer,
    condition json
);

這張表中的數據是

帳戶ID 狀況
1個 [{"action":"read","subject":"rootcompany","conditions":{"rootcompanyid":{"$in":[35,20,5,6]}}}]
2個 [{"action":"read","subject":"rootcompany","conditions":{"rootcompanyid":{"$in":[1,4,2,3,6]}}}]
3個 [{"action":"read","subject":"rootcompany","conditions":{"rootcompanyid":{"$in":[5]}}}]

我需要在 (5) 中獲取所有具有rootcompanyid的帳戶的詳細信息。 如果任何 **rootcompanyid 的 ** 部分存在於任何帳戶詳細信息中,則應顯示結果。 所以 output 應該包含account_id --> 1 和 3

下面的查詢只獲取最后一行 (account_id = 3) 而不是第一行

SELECT *
  FROM account_details
 WHERE ((condition->0->>'conditions')::json->>'rootcompanyid')::json->>'$in' = '[5]';

預期 Output :如果任何 **rootcompanyid 的 ** 部分存在於任何帳戶詳細信息中,則應顯示結果。

帳戶ID 狀況
1個 [{"action":"read","subject":"rootcompany","conditions":{"rootcompanyid":{"$in":[35,20,5,6]}}}]
3個 [{"action":"read","subject":"rootcompany","conditions":{"rootcompanyid":{"$in":[5]}}}]

使用 JSON 包含運算符可以輕松完成此操作:

WHERE condition::jsonb @> '[ { "conditions": { "rootcompanyid": { "$in": [5] } } } ]'

如果要搜索多個數組元素,請將上述條件中的兩個與OR一起使用或使用 JSONPATH 查詢:

WHERE jsonb_path_exists(
         condition::jsonb,
         '$[*].conditions.rootcompanyid.\$in[*] ? (@ == 5 || @ == 6)'
      )

暫無
暫無

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

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