如何在Sequelize中移除关联模型的数组包裹,返回单个对象
Sequelize查询:将关联数组转为单个对象
方案1:修改关联关系(推荐)
如果用户与角色实际是一对一绑定(每个用户仅对应一个角色),直接把多对多关联替换为一对一关联:
- 用户模型配置:
user.belongsTo(Role, { as: 'role' }) - 角色模型配置:
role.hasOne(User, { as: 'user' })
修改后执行原查询代码,role字段会直接返回单个对象,无需额外处理。
方案2:查询后处理结果
若需保留多对多关联,可在查询完成后遍历结果,将role数组转为单个对象:
const users = await this.userRepository.findAll({ include: [ { model: Role, as: 'role', through: { attributes: [] }, } ], }); // 转换每个用户的role字段 const formattedUsers = users.map(user => { const userObj = user.toJSON(); userObj.role = userObj.role[0]; // 取数组第一个元素 return userObj; });
方案3:通过查询配置实现
在include中添加limit: 1,同时启用raw和nest参数,直接获取嵌套的单个对象:
const users = await this.userRepository.findAll({ raw: true, nest: true, include: [ { model: Role, as: 'role', through: { attributes: [] }, limit: 1, } ], });
注意:
raw: true会返回原生JSON对象而非Sequelize实例,nest: true确保关联字段正确嵌套。
内容的提问来源于stack exchange,提问作者Alexey Alpatov
相关产品推荐
相关产品推荐

