Sequelize(或清除 SQL)查询以选择包含 JSON 字段中的值的行?
Posted
技术标签:
【中文标题】Sequelize(或清除 SQL)查询以选择包含 JSON 字段中的值的行?【英文标题】:Sequelize (or clear SQL) query for selecting rows what includes value in JSON field? 【发布时间】:2018-08-24 18:08:47 【问题描述】:我的 mysql 中有行,我需要 Sequelize.js 查询。
每一行都有 JSON 类型的 col,例如:
[
id: 1234, blah: "test",
id: 3210, blah: "test",
id: 5897, blah: "test"
]
我有id
,我需要在数组中的至少一个对象中选择包含此id
的行。
【问题讨论】:
docs.sequelizejs.com/manual/tutorial/querying.html#json可能对你有帮助 【参考方案1】:原始的 mysql 查询将是这样的:
SELECT * FROM `user` WHERE JSON_CONTAINS(`comments`, '"id": 1234');
简单的续集示例:
const fn, col, cast = this.sequelize;
const User = this.sequelize.define('user',
id:
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
,
comments: DataTypes.JSON,
defaultValue: [],
)
User.findAll(
where: fn('JSON_CONTAINS', col('comments'), cast('"id": 1234', 'CHAR CHARACTER SET utf8')),
)
.then(users => console.log('result', users.map(u => u.get())))
.catch(err => console.log('error', err));
Cast 函数用于取消转义 "id" 周围的双引号,以避免像这样的错误查询字符串:
SELECT * FROM `user` WHERE JSON_CONTAINS(`comments`, '\"id\": 1234');
还有一个脏mysql查询例子(不要用):
SELECT * FROM `user` WHERE `comments` LIKE '%"id": 1234%';
【讨论】:
如何在 JSON_CONTAINS 中使用 OR 条件?查询就像SELECT * FROM projects WHERE JSON_CONTAINS(
stackholders, 2) OR owner = 1
以上是关于Sequelize(或清除 SQL)查询以选择包含 JSON 字段中的值的行?的主要内容,如果未能解决你的问题,请参考以下文章