Sequelize 在 JSON 数组字段 Postgresql 中查找
Sequelize find in JSON array field Postgresql
我的 PostgreSQL 数据库的 JSONB 类型字段名为“元数据”,具有以下内容结构:
row1: {
"name": "test",
"description": "test",
"attributes" : [ { "type": "level" , "level": 1 }, { "type": "name" , "name": "Fish" } ]
}
row2: {
"name": "test2",
"description": "test2",
"attributes" : [ { "type": "level", "level": 4 }, { "type": "name" , "name": "Cat" } ]
}
row3: {
"name": "test4",
"description": "test4",
"attributes" : [ { "type": "level", "level": 7 }, { "type": "name" , "name": "Dog" } ] }
我尝试使用 Sequelize 在 [1, 5] 之间通过 attributes.level 筛选器发出 findAll 查询请求,但没有得到一些结果。如何在 json 数组之间找到?
这里是参数化查询。 :lo
和 :hi
是参数。 the_table
CTE代表真实table作为说明。
with the_table(r, metadata) as
(
values
('row1', '{"name": "test", "description": "test", "attributes" : [ { "type": "level" , "level": 1}, { "type": "name" , "name": "Fish" }]}'::jsonb),
('row2', '{"name": "test2", "description": "test2", "attributes" : [ { "type": "level", "level": 4 }, { "type": "name" , "name": "Cat" }]}'),
('row3', '{"name": "test4", "description": "test4", "attributes" : [ { "type": "level", "level": 7 }, { "type": "name" , "name": "Dog" }]}')
)
select * from the_table
where exists
(
select from jsonb_array_elements(metadata -> 'attributes') e
where (e ->> 'level')::numeric between :lo and :hi
);
我的 PostgreSQL 数据库的 JSONB 类型字段名为“元数据”,具有以下内容结构:
row1: {
"name": "test",
"description": "test",
"attributes" : [ { "type": "level" , "level": 1 }, { "type": "name" , "name": "Fish" } ]
}
row2: {
"name": "test2",
"description": "test2",
"attributes" : [ { "type": "level", "level": 4 }, { "type": "name" , "name": "Cat" } ]
}
row3: {
"name": "test4",
"description": "test4",
"attributes" : [ { "type": "level", "level": 7 }, { "type": "name" , "name": "Dog" } ] }
我尝试使用 Sequelize 在 [1, 5] 之间通过 attributes.level 筛选器发出 findAll 查询请求,但没有得到一些结果。如何在 json 数组之间找到?
这里是参数化查询。 :lo
和 :hi
是参数。 the_table
CTE代表真实table作为说明。
with the_table(r, metadata) as
(
values
('row1', '{"name": "test", "description": "test", "attributes" : [ { "type": "level" , "level": 1}, { "type": "name" , "name": "Fish" }]}'::jsonb),
('row2', '{"name": "test2", "description": "test2", "attributes" : [ { "type": "level", "level": 4 }, { "type": "name" , "name": "Cat" }]}'),
('row3', '{"name": "test4", "description": "test4", "attributes" : [ { "type": "level", "level": 7 }, { "type": "name" , "name": "Dog" }]}')
)
select * from the_table
where exists
(
select from jsonb_array_elements(metadata -> 'attributes') e
where (e ->> 'level')::numeric between :lo and :hi
);