Jalal 的回答很棒,但除非我稍微调整一下,否则对我不起作用。这对我有用:
首先:创建一个迁移,将您想要的字段添加为类型TEXT。
示例 - 我想在 Stores 表中添加一个名为 address 的字段:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn("Stores", "address", Sequelize.TEXT);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn("Stores", "address");
}
};
下一步:
在您的模型中,将带有 getter 和 setter 的字段添加到您的字段和数据类型列表(对象)中:
address: {
type: DataTypes.TEXT,
get: function() {
return JSON.parse(this.getDataValue("address"));
},
set: function(value) {
return this.setDataValue("address", JSON.stringify(value));
}
},
所以我的整个模型看起来像这样:
module.exports = (sequelize, DataTypes) => {
const Store = sequelize.define(
"Store",
{
name: DataTypes.STRING,
isActive: DataTypes.BOOLEAN,
address: {
type: DataTypes.TEXT,
get: function() {
return JSON.parse(this.getDataValue("address"));
},
set: function(value) {
return this.setDataValue("address", JSON.stringify(value));
}
}
},
{}
);
Store.associate = function(models) {
// associations can be defined here
Store.hasMany(models.Order, {
foreignKey: "id",
targetKey: "storeId"
});
};
return Store;
};
现在您可以像在数据库中使用 JSON 类型字段一样创建和检索记录。
例如:const store = await Store.create({name: "Joe's corner store", address: {address1: "123 test street", city: "Los Angeles", state: "CA"}})
一些注意事项:
在上面的代码块中...
- 将
address 替换为您要使用的字段名称。
- 将
Stores 替换为您的模型/表名称。
- 我在设置器上添加了
return,否则在尝试创建新记录时会出错(Jalal 的方式)。