我有一个带有jsonb列的表,文档就像这些(简体)
{
"a": 1,
"rg": [
{
"rti": 2
}
]
}
我想过滤所有具有“ rg”字段且数组中至少有一个“ rti”字段的行。
我当前的解决方案是
log->>'rg' ilike '%rti%'
还有另一种方法,可能存在更快的解决方案。
答案 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