如何在sequelize standard createdAt字段中使用毫秒?

时间:2017-12-11 12:08:45

标签: javascript mysql node.js datetime milliseconds

在Nodejs应用程序中,我使用Sequelize ORM将记录写入mysql数据库。默认情况下,每个表都有一个createdAt字段,但只记录日期时间和秒:

mysql> SELECT createdAt FROM ticks LIMIT 3;
+---------------------+
| createdAt           |
+---------------------+
| 2017-11-08 16:34:21 |
| 2017-11-08 16:34:15 |
| 2017-11-08 16:34:27 |
+---------------------+
3 rows in set (0.00 sec)

由于我正在运行非常时间敏感的服务,我还想记录毫秒数。在docs I found the data types中,其中包括:

Sequelize.DATE(6)  // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision

我从未明确地写过createdAt字段(Sequelize自动执行),所以我不确定如何写入毫秒。

有人能指出我使用毫秒精度使用createdAt字段保存记录的正确方向吗?欢迎所有提示!

2 个答案:

答案 0 :(得分:0)

您可以在模型中明确定义createdAt,例如:

id: {
    type: Sequlieze.INTEGER(11).UNSIGNED,
    autoIncrement: true,
    primaryKey: true
},
...
...
createdAt: {
    type: schema.DATE(6),
    allowNull: true,
    defaultValue: Sequelize.fn('NOW')
}

或者通过以下方式重命名:

created_ts: {
    type: schema.DATE(6),
    allowNull: true,
    defaultValue: Sequelize.fn('NOW')
}, {
    createdAt: created_ts
}

答案 1 :(得分:0)

我更新了模型并创建了一个使用毫秒的迁移:

型号:

import Sequelize from 'sequelize'

class Ticks extends db.instance.Model {
  static init(sequelize) {
    return super.init({
      .
      .
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE(6)
      }
    })
  }
}

迁移:

export default {
  up: (queryInterface, Sequelize) => queryInterface
    .changeColumn('ticks', 'createdAt', {
      allowNull: false,
      type: Sequelize.DATE(6)
    }),
  down: (queryInterface, Sequelize) => queryInterface
    .changeColumn('ticks', 'createdAt', {
      allowNull: false,
      type: Sequelize.DATE
    })
}

(使用ES6语法)

通过这些更改,我可以获得毫秒工作(虽然它似乎只有3个位置,即使我指定了6个)