如何使sequalize bulk创建x个相同的记录,只增加日期?

时间:2016-05-23 22:29:58

标签: javascript node.js postgresql sequelize.js

我正在尝试为x这样的简单模型创建x个增量天数的记录:

module.exports = function(sequalize, DataTypes){
var Availability = sequalize.define('availability', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    date: {
        type: DataTypes.DATE,
        allowNull: false
    },
    reserved: {
        type:DataTypes.BOOLEAN,
        defaultValue: false
    }
  });   
  return Availability;

}

我是否可以使用智能批量创建方法而无需使用for循环构建对象?

2 个答案:

答案 0 :(得分:1)

如果您可以直接使用SQL,那么有一种相对简单的方法可以做到这一点。 generate_series函数返回包含一系列数据的单列表。

INSERT INTO availability
  (date)
SELECT *
  FROM generate_series('2016-06-01'::date, 
                       '2016-08-01'::date,
                       '1 day');

有关详细信息,请参阅the documentation

答案 1 :(得分:1)

在不使用PostgeSQL特定功能的情况下实现,仅使用Sequelize和JavaScript日期:

(我知道,这是通过使用for循环构造对象来完成的,但这对于其他人来说只是搜索一种创建具有不同日期的记录的方式可能会很有趣,而不会牺牲能够切换数据库)

//This will create 5 dates, each with 1 day inbetween, starting from today:
var today = new Date();
var dates = [];
dates.push(today);
for (var i = 0; i < 5; i++) {
    //TODO: change each element of 'dates' to be an object, add the remaining 
    //attributes of 'Availability' with a date to each of this objects
    var nextDay = new Date(dates[i].getTime());
    nextDay.setDate(dates[i].getDate() + 1);
    dates.push(nextDay);
}
//'dates' will contain 5 dates now.
//TODO: handle '.then' and '.catch'
Availability.bulkCreate(dates);