如何获取今天的 sequelize js 记录

Mul*_*yan 1 mysql node.js express sequelize.js

我有一张类似于下表的表格。我试图找到今天所有价格的总和。

| id| price |       created        |
|---|-------|----------------------|
| 0 |  500  | 2018-04-02 11:40:48  |
| 1 | 2000  | 2018-04-02 11:40:48  |
| 2 | 4000  | 2018-07-02 11:40:48  |
Run Code Online (Sandbox Code Playgroud)

下面的代码是我想出来的,但它似乎不起作用。

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      created: TODAY,
    },
});
console.log(SUM);
Run Code Online (Sandbox Code Playgroud)

即使今天有条目,SUM 的值为 0。我也尝试了以下但它也没有奏效。

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      created: Sequelize.DATE(TODAY),
    },
});
console.log(SUM);
Run Code Online (Sandbox Code Playgroud)

在终端查询的SQL语句如下。

执行(默认):SELECT sum(`price`) AS `sum` FROM `orders` AS `orders` WHERE `orders`.`created` = '2019-05-27 18:30:00';

Teo*_*cci 7

这里发生的事情是您正在比较精确的时间戳,例如'2019-05-27 11:40:48'等于'2019-05-27 18:30:00'。所以这种比较永远不会给你结果,因为即使是同一天(5 月 27 日)但时间不同。

所以在这里你有一个可能的解决方案。

const Op = Sequelize.Op;
const TODAY_START = new Date().setHours(0, 0, 0, 0);
const NOW = new Date();

const SUM = await OrdersModel.sum('price', {
    where: {
      created: { 
        [Op.gt]: TODAY_START,
        [Op.lt]: NOW
      },
    },
 });
 console.log(SUM);
Run Code Online (Sandbox Code Playgroud)

您需要创建这样的查询:created < [NOW] AND created > [TODAY_START] 为什么?因为您将获得之后注册的所有价格的总和NOW。此代码还将帮助您获得一系列日期的总和。

PostgreSQL 的替代品

请注意,PostgreSQL 允许您截断到特定的间隔。因此,您可以调用该sequelize.fn()方法来创建一个调用“date_trunc”的查询,您可以在此链接中阅读更多内容。像这样:

const SUM = await OrdersModel.sum('price', {
    where: {
      sequelize.fn('CURRENT_DATE'): {
        [Op.eq]:  sequelize.fn('date_trunc', 'day', sequelize.col('created'))
      }
    },
});
console.log(SUM);
Run Code Online (Sandbox Code Playgroud)

还记得更新到最新版本

npm i sequelize@5.8.6 --s
Run Code Online (Sandbox Code Playgroud)


小智 5

获取今天记录的最佳方式。

      const op = sequelize.Op;
      const moment = require('moment');
      const TODAY_START = moment().format('YYYY-MM-DD 00:00');
      const NOW = moment().format('YYYY-MM-DD 23:59');

      const todaysRecord = await OrdersModel.findAll({

                where: {
                    createdAt: {
                        [op.between]: [
                            TODAY_START,
                            NOW,
                        ]
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)