You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PostgreSQL查询改写为NestJS/Sequelize风格的查询语句

直接对应原SQL的转换方案

提前导入Sequelize内置工具:

import { Op, fn, literal } from 'sequelize';

查询代码如下:

const currentMonthMovieCount = await this.moviesSchema.count({
  where: {
    ownerId: 3,
    [Op.and]: [
      // 匹配创建时间年份为当前年
      sequelize.where(
        fn('EXTRACT', literal('YEAR FROM "createdAt"')),
        fn('EXTRACT', literal('YEAR FROM NOW()'))
      ),
      // 匹配创建时间月份为当前月
      sequelize.where(
        fn('EXTRACT', literal('MONTH FROM "createdAt"')),
        fn('EXTRACT', literal('MONTH FROM NOW()'))
      )
    ]
  }
});

可选性能优化方案

如果你的createdAt字段建有索引,使用EXTRACT函数会触发全表扫描导致索引失效,可以改用时间区间判断的写法,查询效率更高:

const now = new Date();
// 当月第一天零点
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
// 下月第一天零点
const nextMonthStart = new Date(now.getFullYear(), now.getMonth() + 1, 1);

const currentMonthMovieCount = await this.moviesSchema.count({
  where: {
    ownerId: 3,
    createdAt: {
      [Op.gte]: monthStart,
      [Op.lt]: nextMonthStart
    }
  }
});

内容的提问来源于stack exchange,提问作者SHEZOID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:00:00