我有一个包含json数据类型的用户模型。我使用MySQL作为我的数据库,但是当查看他们的文档以了解如何使用JSON进行查询时,似乎没有关于MySQL的内容。
const User = db.define("User", {
UserId: {
primaryKey: true,
type: Sequelize.INTEGER
},
colors: {
type: Sequelize.JSON,
allowNull: false
}
}我有一个用户,他们有一个id,还有一个数组,里面有他们最喜欢的颜色。
UserId | colors
1 |["black, "blue"]
2 |["blue"]
3 |["black"] 我想查询所有拥有最喜欢的蓝色的用户。我试着像这样询问,
User.findAll({ where: {colors: ["blue"]} })并期望返回用户1和2,但这不起作用,我没有找到任何在线来源,显示了该做什么。一些stackoverflow有针对JSON对象的解决方案,比如这个Sequelize, MySQL - Filtering rows in table with JSON column values,但是我找不到任何数组的源代码。有什么解决方案吗?
发布于 2021-05-03 12:08:09
您可以使用sequelize.fn和sequelize.col方法分别指定一个SQL函数调用和一个表列。这样,您就可以创建自己的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;https://stackoverflow.com/questions/67362518
复制相似问题