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

时间:2018-12-27 14:20:53

标签: mysql sql node.js sequelize.js

我正在尝试在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,第1行的P'

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

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

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

2 个答案:

答案 0 :(得分:4)

快到了。您应该像这样在新对象中添加索引:

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;
};

答案 1 :(得分:1)

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

对于我来说,只需在迁移文件中的createTable方法之后执行addIndex

迁移:

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

在迁移文件中对我有用。