如何在Sequelize模型中定义索引?

i.b*_*rod 2 mysql sql node.js sequelize.js

我正在尝试在Sequelize模型内为我的SQL列之一创建一个简单的非唯一索引。我试图按照这篇文章:如何在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;
};
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

未处理的拒绝SequelizeDatabaseError:您的SQL语法有错误。检查与您的MariaDB服务器版本相对应的手册,以在第1行的'[object Object],createdAt DATETIME NOT NULL,updatedAtDATETIME NOT NULL,P' 附近使用正确的语法

我在server.js文件中的代码是这样的:

models.sequelize.sync().then(function () {
    server.listen(port, () => {
        console.log('server ready')
    })
});
Run Code Online (Sandbox Code Playgroud)

我的设置有什么问题?使用Sequelize还有其他方法吗?

Roi*_*Roi 6

差不多好了。您应该在新对象中添加索引,如下所示:

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;
};
Run Code Online (Sandbox Code Playgroud)

  • 呵呵。如果这解决了这个问题,那么请接受我的回答:) (2认同)

Sud*_*rma 6

它也可以在单一迁移中工作。

就我而言,只需在迁移文件中的 createTable 方法之后执行 addIndex

移民:

return queryInterface.createTable('Item', {
    // columns...
}).then(() => queryInterface.addIndex('Item', ['OwnerId']))
.then(() => {
    // perform further operations if needed
});
Run Code Online (Sandbox Code Playgroud)

它在迁移文件中对我有用。