我希望将postgres jsonb列与数组一起使用并能够对其进行过滤,所以我有一个带有列的架构:
CREATE TABLE testtable
(
id varchar(32) NOT NULL,
refs jsonb NULL,
)
,该列包含Json格式的数据:
{ "refs": ["one-1-0", "two-3-2", "two-3-4" ] }
我希望能够返回包含以(例如)“ two-3-”开头的数组元素的所有行。
我已经尝试了好几种方法,但并不能使它正常工作(我最接近的是将数组部分作为文本获取并以字符串形式进行搜索-但这很讨厌)
我还想在此列中添加合适的索引以支持此查询。
任何建议都将令人赞叹并得到好评! 谢谢
答案 0 :(得分:3)
const myArray = [
'/unit/unit/225/unit-225.pdf',
'/nit/nit-dep/4.11/nit-4.11.pdf',
'/nit/nit-dep/4.12/nit-4.12.pdf',
'/org/viti/viti-engine/5.1/viti-engine-5.1.pdf',
'/org/viti/viti-spring/5.1/viti-spring-5.1.pdf'
];
var parentObject = {}
myArray.forEach((str) => {
const props = str.slice(1).split('/');
const filename = props.pop();
const lastObj = props.reduce((a, prop) => {
if (!a[prop]) {
a[prop] = {};
}
return a[prop];
}, parentObject);
lastObj[filename] = [];
});
console.log(parentObject);
SELECT DISTINCT -- 3
id, refs
FROM
testtable,
jsonb_array_elements_text(refs -> 'refs') -- 1
WHERE
value LIKE 'two_3%' -- 2
比较器和value
通配符按数组元素(LIKE
)过滤所有记录%