我在数据库中有一个 JSONB 列。
我想向 DB 提出请求,我可以在其中检查此 JSON 中的某些值是真还是假:
SELECT *
FROM table
WHERE ("json_column"->'data'->>'data2')::boolean = true AND id = '00000000-1111-2222-3333-456789abcdef'
LIMIT 1
所以,我的 Sequelize 请求:
const someVariableWithColumnName = 'data2';
Model.findOne({
where: {
[`$("json_column"->'data'->>'${someVariableWithColumnName}')::boolean$`]: true,
id: someIdVariable,
},
order: [/* some order, doesn't matter */],
})
并且 sequelize 产生不好的结果,例如:
SELECT *
FROM table
WHERE "(json_column"."->'data'->>'data2')::boolean" = true AND id = '00000000-1111-2222-3333-456789abcdef'
LIMIT 1
按
.
拆分我的列并将 "
添加到每个元素。知道如何摆脱在 where 条件下向列添加
"
吗?编辑:
这是我对
sequelize.literal()
的查询:const someVariableWithColumnName = 'data2';
Model.findOne({
where: {
[sequelize.literal(`$("json_column"->'data'->>'${someVariableWithColumnName}')::boolean$`)]: true,
id: someIdVariable,
},
order: [/* some order, doesn't matter */],
})
最佳答案
您可以使用 Sequelize.literal()
来避免伪引号。恕我直言,将 json 处理包装在 db 函数中也可能会有所帮助。
关于javascript - 在 where 条件下使用 "续行包装列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59290407/