gpt4 book ai didi

node.js - Sequelize : find in json array

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:23 24 4
gpt4 key购买 nike

在 Sequelize 中我有一个模型:

{
modelId: {
type: DataTypes.UUID ,
allowNull: false,
primaryKey: true,
defaultValue: DataTypes.UUIDV4
}
name: DataTypes.STRING(1024),
type: DataTypes.STRING,
obj: DataTypes.JSON
}

在 DB 中,我的 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”,

有人能帮忙吗?

最佳答案

我不熟悉您遇到的具体错误,但一个潜在的问题是您使用的是 JSON 列而不是 JSONB。在 Postgres 中,JSON 列仅存储原始 JSON 文本,因此 don't support Sequelize 的“包含”所需的包含运算符 (@>)。

解决此问题所需要做的就是将模型中的列定义更改为:

obj: DataTypes.JSONB

我能想到的唯一其他问题是 req.body.id 的值无效。我建议验证它是否确实获得了有效的 ID 字符串。

除了这 2 个潜在问题,您编写的查询应该有效。

关于node.js - Sequelize : find in json array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51025837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com