如何使用时间戳上的NOW()来更新Sequelize?

我正在尝试做如下的事情:

model.updateAttributes({syncedAt: 'NOW()'}); 

显然,这不起作用,因为它只是作为一个string传递。 我想避免传递一个节点构造的时间戳,因为后来我将它与另一个“ON UPDATE CURRENT_TIMESTAMP”字段进行比较,数据库和源可能运行不同的时间。

我唯一的select只是build立一个数据库程序并调用它?

您可以使用Sequelize.fn来适当地包装它:

 instance.updateAttributes({syncedAt: sequelize.fn('NOW')}); 

这是一个完整的工作示例:

 'use strict'; var Sequelize = require('sequelize'); var sequelize = new Sequelize(/*database*/'test', /*username*/'test', /*password*/'test', {host: 'localhost', dialect: 'postgres'}); var model = sequelize.define('model', { syncedAt: {type: Sequelize.DATE} }); sequelize.sync({force: true}) .then(function () { return model.create({}); }) .then(function () { return model.find({}); }) .then(function(instance){ return instance.updateAttributes({syncedAt: sequelize.fn('NOW')}); }) .then(function () { process.exit(0); }) .catch(function(err){ console.log('Caught error! ' + err); }); 

这产生了

 UPDATE "models" SET "syncedAt"=NOW(),"updatedAt"='2015-02-09 18:05:28.989 +00:00' WHERE "id"=1 

值得一提(通过search来到这里的人),NOW()不是标准的,不能在SQL服务器上工作 – 所以如果你关心可移植性,不要这样做。

 sequelize.literal('CURRENT_TIMESTAMP') 

可能会更好