Sequelize包含在数据库中计算的计算字段?

在Node.js中使用Sequelize是否有可能定义一个在检索数据时在数据库中计算的字段?

我知道我可以添加一个自定义getter到DAO来计算节点中的东西,但只能在已经加载的数据上工作。

我的目标是定义在数据库中运行的计算,因此可以使用子查询来计算使用其他数据。

例如,我最好喜欢这样做:

Products = Sequelize.define('Product', { 'productId': { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, 'isProductActive': Sequelize.INTEGER, 'productName': Sequelize.STRING, 'productPrice': Sequelize.DECIMAL, // This is what I don't think Sequelize supports // but is what I ideally want to do... 'totalSales': { type: Sequelize.DECIMAL, subQuery: "SELECT SUM(OD.TotalPrice) FROM OrderDetails OD WHERE OD.productID = Products.productID" } }; 

任何方式来做到这一点?

现在我使用Sequelize.query来运行自定义查询,但后来我失去了Sequelize的所有function,发现自己重做了Sequelize已经完成的工作。 另一个选项是运行两个查询 – 一个完全通过Sequelize获取基本数据,另一个只获取计算数据,然后将计算的数据复制到JavaScript中的对象。

我最终做的是在数据库中创build一个视图,然后为视图创build一个sequelize定义,就像它是一个表一样,并且包含了计算的字段,因为它是视图的一部分。

这工作得很好,但并不理想。

你也许可以使用Sequelize模型的getterMethods定义:

 Products = Sequelize.define('Product', { 'productId': { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, 'isProductActive': Sequelize.INTEGER, 'productName': Sequelize.STRING, 'productPrice': Sequelize.DECIMAL, // This is what I don't think Sequelize supports // but is what I ideally want to do... }, { getterMethods: { totalSales: function() { var pId = this.productId // here happened your subQuery: "SELECT SUM(OD.TotalPrice) FROM OrderDetails OD WHERE OD.productID = " + pId return something; } } });