NodeJS 如何使用关联表进行批量创建,如果表中已经存在新值,则不创建新值

smtd7mpg  于 2022-12-22  发布在  Node.js
关注(0)|答案(1)|浏览(120)

我有两个模特,演员和电影,他们属于很多协会

const Movie = sequelize.define(
  MOVIES,
  {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    title: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    year: {
      type: DataTypes.NUMBER,
      allowNull: false,
    },
    format: {
      type: DataTypes.ENUM,
      values: [VHS, DVD, BLU_RAY],
      allowNull: false,
    },
  },
  {
    indexes: [
      {
        unique: true,
        fields: ['title'],
      },
    ],
  }
);

const Actor = sequelize.define(
  ACTORS,
  {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  },
  {
    indexes: [
      {
        unique: true,
        fields: ['name'],
      },
    ],
  }
);

这个逻辑

const moviesData = req.files.movies.data.toString();

      const newMovies = movieHelper.formatArrayOfMovieObjects(moviesData);

      const movies = await Movie.bulkCreate(newMovies, {
        include: {
          model: Actor,
        },
        updateOnDuplicate: ['title'],
      });

      res.json(movies).status(200);

如何使不创建新的记录,如果电影.标题存在于表中
我尝试updateOnDuplicate参数,但它给予我这个错误:[错误:SQLITE约束条件:FOREIGN KEY约束失败

w6lpcovy

w6lpcovy1#

如果您的SQLite版本支持唯一约束/索引,那么您可以创建一个指示title字段的约束/索引,这样选项updateOnDuplicate就可以很好地工作。

相关问题