Sequelize如何查询返回字段匹配指定值的对应记录?
Sequelize查询type="ipsum"无结果解决方案
- 检查模型配置
两个新手高频踩坑点:- 表名映射不匹配:PostgreSQL对表名、字段名大小写敏感,需确保你的Posts模型中
tableName配置和实际表名完全一致,同时如果你的type字段名有大小写差异也要对应修改。
参考正确的模型配置示例:
const Posts = sequelize.define('Posts', { type: DataTypes.STRING, // 其他字段定义 }, { tableName: 'posts', // 和你DBeaver中查询的表名完全一致,如果表名是大写Posts就写'Posts' timestamps: false // 你的表如果没有createdAt、updatedAt字段必须关闭,否则查询会自动加上这两个字段的过滤条件,导致查不到数据 })- 字段类型不匹配:检查模型中
type字段的类型定义,如果你定义为枚举类型,需要确保枚举值包含ipsum,否则会自动过滤结果。
- 表名映射不匹配:PostgreSQL对表名、字段名大小写敏感,需确保你的Posts模型中
- 打印实际执行SQL定位问题
在查询参数中临时添加日志配置,直接输出Sequelize最终生成的SQL,和你手动执行的SQL做对比即可快速定位差异:const newPost = await components.db.Posts.findAll({ where: { type: "ipsum", }, logging: console.log // 控制台会打印完整执行的SQL语句 }); - 返回结果处理
findAll默认返回的是Sequelize模型实例数组,不是普通JSON对象,如果你需要直接返回给接口使用,需要做一层转换:export const loadNewPost = async (components) => { try { const newPost = await components.db.Posts.findAll({ where: { type: "ipsum", }, }); // 转换为纯JSON对象 return newPost.map(item => item.toJSON()); } catch (e) { throw e; } };
内容的提问来源于stack exchange,提问作者Serena
相关产品推荐
相关产品推荐

