如何在 Sequelize 模型中定义索引?
Posted
技术标签:
【中文标题】如何在 Sequelize 模型中定义索引?【英文标题】:How to define an index, within a Sequelize model? 【发布时间】:2019-05-25 13:42:01 【问题描述】:我正在尝试在 Sequelize 模型中为我的一个 SQL 列创建一个简单的非唯一索引。我试着关注这个帖子:How to define unique index on multiple columns in sequelize。
这是我的代码:
module.exports = (sequelize, DataTypes) =>
const Item = sequelize.define('Item',
itemId: DataTypes.STRING,
ownerId: DataTypes.INTEGER,
status: DataTypes.STRING,
type: DataTypes.STRING,
nature: DataTypes.STRING,
content: DataTypes.STRING,
moment: DataTypes.BIGINT,
indexes:[
unique: 'false',
fields:['ownerId']
]
);
return Item;
;
我收到此错误:
未处理的拒绝 SequelizeDatabaseError:您的文件中有错误 SQL 语法;检查与您的 MariaDB 服务器相对应的手册 在 '[object Object],
createdAt
附近使用正确语法的版本 DATETIME NOT NULL,updatedAt
DATETIME NOT NULL, P' 在第 1 行
我在 server.js 文件中的代码是这样的:
models.sequelize.sync().then(function ()
server.listen(port, () =>
console.log('server ready')
)
);
我的设置有什么问题?有没有其他方法可以用 Sequelize 完成?
【问题讨论】:
【参考方案1】:差不多了。您应该像这样在新对象中添加索引:
module.exports = (sequelize, DataTypes) =>
const Item = sequelize.define('Item',
itemId: DataTypes.STRING,
ownerId: DataTypes.INTEGER,
status: DataTypes.STRING,
type: DataTypes.STRING,
nature: DataTypes.STRING,
content: DataTypes.STRING,
moment: DataTypes.BIGINT
,
indexes:[
unique: false,
fields:['ownerId']
]
);
return Item;
;
【讨论】:
呵呵。如果这解决了这个问题,那么请接受我的回答:) 我会在 4 分钟内,如果它允许我这样做:D @Roi 是否需要是表中的实际字段或代码定义中提到的字段名称 @Root 我不确定你的意思。插入到 fields 数组中的字段名称对应于 Item 模型中的字段之一。如果我错了,请纠正我,但这些名称也将始终反映数据库表中字段的名称。 @Roi 假设有一个模型定义的列为 ItemId: type: DataTypes.BIGINT, field: 'item_id', autoIncrement: true 在这个索引应该是什么? ItemId 或 item_id【参考方案2】:它也可以在单个迁移中工作。
在我的情况下,只需在迁移文件中的 createTable 方法之后执行 addIndex
迁移:
return queryInterface.createTable('Item',
// columns...
).then(() => queryInterface.addIndex('Item', ['OwnerId']))
.then(() =>
// perform further operations if needed
);
迁移文件对我有用。
【讨论】:
以上是关于如何在 Sequelize 模型中定义索引?的主要内容,如果未能解决你的问题,请参考以下文章
从已经定义的模型中获取 Sequelize.js ENUM 值