postgresql Sequelize/postgres:获取与具有提供值的对象数组中的值匹配的记录

ryhaxcpt  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(112)

我有一个db列,它存储一个对象数组。示例值为:

[{
  "recordId": 11,
  "column": [{
      "name": "some value",
      "id": "1"
    },
    {
      "name": "other value",
      "id": "2"
    }
  ]
}, {
  "recordId": 12,
  "column": [{
      "name": "some value",
      "id": "3"
    },
    {
      "name": "other value",
      "id": "4"
    }
  ]
}]

现在,如果我想通过sequelize搜索具有id:1的记录,where子句中应该有什么,或者有其他方法吗?

xcitsw88

xcitsw881#

你正在寻找json数组中至少有一个id属性值为1的对象的行。在纯SQL中,您可以使用exists和一个相关的子查询来解嵌套数组:

select t.*
from mytable t
where exists (
    select 1
    from jsonb_array_elements(t.column) as x(obj)
    where (x.obj ->> 'id')::int = 1
)
kokeuurv

kokeuurv2#

可以使用Op.contains

Model.findAll({
  where: {
    column: {
      [Op.contains]: [{ id: '1' }]
    }
  }
});

这将生成以下SQL查询

SELECT * FROM Model WHERE column @> '[{"id":"1"}]';

相关问题