如何从jsonb数组字段中具有jsonb嵌套字段的PostgreSQL过滤数据?

时间:2019-08-04 17:33:04

标签: postgresql knex.js jsonb

我有一个带有jsonb列的表,文档就像这些(简体)

{
      "a": 1,
      "rg": [
        {
          "rti": 2
        }
      ]
    }

我想过滤所有具有“ rg”字段且数组中至少有一个“ rti”字段的行。

我当前的解决方案是

log->>'rg' ilike '%rti%'

还有另一种方法,可能存在更快的解决方案。

1 个答案:

答案 0 :(得分:0)

另一种方法是将let s1 =  ["A", "B", "C", "D", "B"] let s2 = ["A", "B", "C", "D", "B", "A", "X", "Y"] let map = new Map() s1.forEach(v=>{ if(map.has(v)){ map.set(v,map.get(v)+1) } else{ map.set(v,1) } }) let final = s2.filter(val=>{ if(map.has(val)){ if(map.get(val)){ map.set(val, map.get(val)-1) return true } return false } return true }) console.log(final)应用于jsonb对象,然后将jsonb_each应用于从jsonb_array_elements_text方法提取的值:

jsonb_each

Demo