Node.js Sequelize:原始数据和模型之间的映射

Node.js Sequelize:原始数据和模型之间的映射,node.js,sequelize.js,Node.js,Sequelize.js,使用原始查询从MySQL数据库检索数据时遇到一些问题。 问题在于原始数据和sequelize中定义的模型实例之间的映射。 特别是那些在数据库中加下划线并在模型中加上大小写的字段 我是这样定义商店模型的: sequelize.define('stores', { id: { type: DataTypes.INTEGER(11), allowNull: false, primaryKey: true, autoIncremen

使用原始查询从MySQL数据库检索数据时遇到一些问题。 问题在于原始数据和sequelize中定义的模型实例之间的映射。 特别是那些在数据库中加下划线并在模型中加上大小写的字段

我是这样定义商店模型的:

sequelize.define('stores', {
    id: {
        type: DataTypes.INTEGER(11),
        allowNull: false,
        primaryKey: true,
        autoIncrement: true
    },
    ...
    postalCode: {
        type: DataTypes.STRING,
        field: 'postal_code',
    },
    ...
}
我使用以下代码从数据库中的例程中获取数据:

sequelize.query('CALL get_stores()', {model: Stores, type: sequelize.QueryTypes.RAW}).then(function (stores) {
    console.log(stores);
}
根据文档(),如果我定义选项“model”,函数将返回Store的实例,而不是原始数据。 但事实并非如此,对于模型和数据库中名称不同的所有字段(请参见postalCode->postal\u code),我得到的响应返回一个具有数据库字段名称(postal\u code)的对象,而不是模型中定义的字段名称(postalCode)

我已经尝试使用QueryTypes.SELECT代替QueryTypes.RAW,但没有成功


请注意,使用findAll或findOne方法时没有问题。

您可以在查询中设置选项
mapToModel:true
,以指示Sequelize将返回的字段名转换为您提供的模型中的等效字段名

const User=sequelize.define('User'){
用户标识:{
字段:'user_id',
类型:DataTypes.BIGINT,
primaryKey:对
})
sequelize.query(
'从用户id>1000的用户中选择用户id',
{
mapToModel:没错,
型号:用户
}
)
此功能隐藏在参考文档中: