sqlite - 在 Sequelize 查询中使用带函数的 WHERE
问题描述
我正在尝试JSON_ARRAY_LENGTH()
在我的 Sequelize 查询中使用函数 , :
MyModel.query({
where: sequelize.where(
sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
0
)
});
这似乎不起作用。它会生成一个错误的查询:
SELECT id, title, /* etc. etc. */
FROM MyModel
WHERE
`MyModel`.`attribute` = JSON_ARRAY_LENGTH(`cues)` AND
`MyModel`.`comparator` = '=' AND
`MyModel`.`logic` = 0;
这一切是什么attribute
,,comparator
和logic
东西,我该如何关闭它?
该文档似乎支持我正在做的事情。它的例子:
Post.findAll({
where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6)
});
// SELECT * FROM post WHERE char_length(status) = 6;
任何想法将不胜感激。谢谢!
解决方案
看来我偶然发现了一个错误:
https://github.com/sequelize/sequelize/issues/6440
这已在最近的版本中得到修复:
https://github.com/sequelize/sequelize/pull/9730/commits/3b2972db2c494c8a4118a7e6c16aad0fc2e0eebe
现在的解决方法是用 AND 包装我的查询:
MyModel.query({
where: {
[sequelize.Op.and]: sequelize.where(
sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
0
)
}
});
推荐阅读
- java - 在 jpanel 上调用 repaint 会导致其子级转移
- javascript - 如何在 JavaScript 中识别 localStorage 键的一部分?
- c# - 使用自己的身份验证、授权时如何在 ASP.NET Core 健康检查调用中检查用户代理?
- c# - 延迟在基于 Kestrel 的 Web 服务器中发送 HttpResponse
- qt - 更新 PyQt5 中嵌入的 matplotlib 图导致重叠
- react-native - 如何在ios手机上同时显示多个警报
- node.js - internal/modules/cjs/loader.js:892 - Node.js npm 版本检查出错
- algorithm - 制作“老虎机”算法
- java - JavaFX 3D透视相机运动
- android - 后台任务中配置更改时再次重新加载 Json 数据