在续集中,我有一个模型:
{
modelId: {
type: DataTypes.UUID ,
allowNull: false,
primaryKey: true,
defaultValue: DataTypes.UUIDV4
}
name: DataTypes.STRING(1024),
type: DataTypes.STRING,
obj: DataTypes.JSON
}
在数据库中,我的obj是这样的数组:
[{
id: '123456',
text: 'test',
name 'xpto'
},{
id: '32554',
text: 'test2',
name 'xpte'
},{
id: '36201',
text: 'test3',
name 'xpta'
}]
我尝试了这些:
btp.findAll({
where: {
obj:{
[Op.contains]:[{id: req.body.id}]
}
},
attributes: ['modelId','name','type','obj']
})
但不起作用,返回此错误:
{"name": "SequelizeDatabaseError",
"parent": {
"name": "error",
"length": 128,
"severity": "ERROR",
"code": "42704",
"file": "parse_coerce.c",
"line": "1832",
"routine": "enforce_generic_type_consistency",
"sql":"....."}
所以,我需要在数据库中找到obj,id:'123456'中的所有条目。
我的问题与此相同: https://github.com/sequelize/sequelize/issues/7349
但是那对我不起作用,我需要返回所有包含...的条目。 我正在使用“ sequelize”:“ 4.28.6”和“ pg-hstore”:“ ^ 2.3.2”,
有什么可以帮助的吗?
答案 0 :(得分:0)
我对您遇到的特定错误不熟悉,但是一个潜在的问题是您使用的是JSON列而不是JSONB。在Postgres中,JSON列仅存储原始JSON文本,因此don't support是Sequelize的“包含”所必需的包含运算符(@>
)。
解决此问题所需要做的就是将模型中的列定义更改为:
obj: DataTypes.JSONB
我唯一想到的另一个问题是req.body.id的值无效。我建议验证一下它实际上是在获取有效的ID字符串。
除了这两个潜在的问题之外,您编写的查询也可以使用。