Sequelizejs,创建索引时的排序字段值

时间:2017-01-27 15:59:17

标签: mysql node.js sequelize.js

我有一些'邀请'模型:

'use strict';

export default function (sequelize, DataTypes) {
  return sequelize.define('Invite', {
      userFromId: {
        type: DataTypes.INTEGER,
        modal: 'User',
        key: '_id',
        onDelete: 'cascade'
      },
      userToId: {
        type: DataTypes.INTEGER,
        modal: 'User',
        key: '_id',
        onDelete: 'cascade'
      },
      accept1: {
        type: DataTypes.BOOLEAN,
        defaultValue: false
      },
      accept2: {
        type: DataTypes.BOOLEAN,
        defaultValue: false
      }

    },{
      indexes: [
        {
          name:'id',
          unique: true,
          fields: ['userFromId','userToId'],
        }]
    }
  );
}

当我要创建一个新的' Invite','userFromId'的组合时,我需要这样做。和' userToId'创建一个索引,无论谁被邀请。例如,邀请{userFromId:1,userToId:2}{userFromId:2,userToId:1}必须具有相同的索引。

我使用sequelize:3.29.0和mysql。

1 个答案:

答案 0 :(得分:0)

使用数据库索引是不可能的,因为[1, 2] != [2, 1]。如果要强制实施此类唯一性,一个选项是创建一个具有唯一索引的新字段,并将其值设置为lower + : + higher,以便在上面的示例中始终以{{1 }}

1:2

您可以在此处查看// Create a field called 'uniqueKey' set to the sorted IDs export default function (sequelize, DataTypes) { return sequelize.define('Invite', { // ... other fields uniqueKey: { type: DataTypes.String, allowNull: false, defaultValue: function() { // create an array of the IDs, sort, then join with : return [ this.getDataValue('userFromId'), this.getDataValue('userToId'), ].sort().join(':'); }, }, // ... other fields },{ indexes: [ { name:'uniqueKey', unique: true, fields: ['uniqueKey'], }] } ); } 的计算方式,无论ID的顺序如何,键/结果都相同:

defualtValue