[英]How to call a Sequelize MySQL JSON query?
我有一个包含 json 数据类型的用户 model。 我正在使用 MySQL 作为我的数据库,但是在查看他们的文档以了解如何使用 JSON 进行查询时,MySQL 上似乎没有任何内容。
const User = db.define("User", {
UserId: {
primaryKey: true,
type: Sequelize.INTEGER
},
colors: {
type: Sequelize.JSON,
allowNull: false
}
}
我的用户有一个 ID,还有一个数组,其中包含他们最喜欢的 colors。
UserId | colors
1 |["black, "blue"]
2 |["blue"]
3 |["black"]
我想查询所有最喜欢蓝色的用户。 我试过这样查询,
User.findAll({ where: {colors: ["blue"]} })
并期望返回用户 1 和 2,但这不起作用,我还没有在网上找到任何资源来说明该怎么做。 一些计算器有针对 JSON 对象的解决方案,例如Sequelize,MySQL - Filtering rows in table with JSON column values ,但我找不到 arrays 的任何来源。任何解决方案?
您可以使用sequelize.fn
和sequelize.col
方法分别指定 SQL function 调用和表列。 这样您就可以创建自己的 where 条件。
User.findAll({
where: sequelize.where(sequelize.fn('JSON_CONTAINS', sequelize.col('colors'), sequelize.literal('blue'), sequelize.literal('$')), 1)
});
对应下面的 mysql 查询:
// SELECT * FROM Users WHERE JSON_CONTAINS(colors, 'blue', '$') = 1;
答案应该是:
User.findAll({
where: sequelize.where(sequelize.fn('JSON_CONTAINS', sequelize.literal('colors'), '"blue"', '$'), 1)
});
笔记:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.