这是模型和postgres
数据库中的JSONB数组数据类型:
.
.
.
MyField: {
type: DataTypes.ARRAY(DataTypes.JSONB),
allowNull: false
}
.
.
.
表格字段包含JSONB值:
{"{\"LessonId\": \"1\", \"TeacherId\": \"1\"}"}
这是sequelize findAll方法中的where子句:
where: {
MyField: {
[Op.contains]: [
{
TeacherId: '1',
}
]
}
}
生成的查询如下:
SELECT
...
"MyField",
FROM
"MyTable" AS "MyTable"
WHERE
"MyTable"."MyField" @> ARRAY [ '{"TeacherId":"1"}' ]:: JSONB [];
结果集为空。但是当我包含LessonId
时,它会做我的答案。我发现postgres将jsonb对象视为String文本。JSONB ARRAY中基于特定键的查询正确方法是什么?
2条答案
按热度按时间ruyhziif1#
ARRAY
类型中的based字段和您尝试实现的操作仅在JSONB
字段类型中受支持。您可以简单地将model属性定义为JSONB
,并且仍然可以在其中存储JSON Array并运行包含操作fwzugrvs2#
像这样怎么样?