簡體   English   中英

PostgreSQL 9.6 jsonb 查詢使用 arrays

[英]PostgreSQL 9.6 jsonb query using like on arrays

我需要用普通的類似函數查詢一個 jsonb 表字段。

這是我的 json 字段

  "campi":[ 
    { 
      "label":"testLabel",
      "valore":[ 
        "testValore",
        "testValore2"
      ],
      "idCampo":"testID",
      "idCampoTP":"testCampoID",
      "proprieta":[ 
        { 
          "label":"testLabel",
          "idProprieta":"testProp"
        }
      ],
      "idTipoCampo":"idTipoCampoID"
    },
    { 
      "label":"testLabel2",
      "valore":[ 
        "testValore3",
        "testValore4"
      ],
      "idCampo":"testID2",
      "idCampoTP":"testCampoID2",
      "proprieta":[ 
        { 
          "label":"testLabel2",
          "idProprieta":"testProp2"
        }
      ],
      "idTipoCampo":"idTipoCampoID2"
    }
  ]
}

甚至可以進行這樣的查詢嗎?

SELECT customfield from procedura WHERE customfield->'campi' @> '[{"label":"testLabel3"}]'

但是使用帶有類似通配符的 testLabel3:testLabel%

另一個問題,是否甚至可以查詢以“testValore”的“valore”獲取對象“campi”?

我的夢想查詢是:

SELECT customfield from procedura WHERE customfield->'campi' @> '[{"label":"testLabel%"}]'

以 % 作為通配符

編輯:

我找到了一種方法來進行一些簡單的查詢:

SELECT customfield FROM procedura, jsonb_array_elements(procedura.customfield #> '{campi}') obj
WHERE  obj->>'idCampoTP' LIKE 'testCampoID3%' group by procedura.id;

但我不知道如何在 valore 字段子數組中搜索

編輯:

我找到了這種方式,但對我來說似乎是一個垃圾解決方案

SELECT customfield FROM procedura, jsonb_array_elements(procedura.customfield #> '{campi}') obj
WHERE  obj->>'valore' LIKE '%stValore5%' group by procedura.id;

是的,它有效:)

用於過濾您在問題中已經提到的“testValore”類型

數據->'campi'@>'[{"label":"testLabel3"}]';

用於提取類型為“testValore”的 id

數據->'campi'@>'[{"valore": ["testValore"]}]';

暫無
暫無

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

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