寻求Sequelize替代原生SQL查询方案:转换指定查询语句
原生SQL转Sequelize查询实现
原生SQL逻辑
查询指定user_id对应的recommended_plan表中,创建时间(created_at)最晚的那条记录。
方案一:对应原生子查询结构
直接映射原生SQL的子查询逻辑,用Sequelize语法实现:
const { Op } = require('sequelize'); const RecommendedPlan = require('../models/recommendedPlan'); // 替换为你的模型实际路径 async function getLatestRecommendedPlan(userId) { const latestPlan = await RecommendedPlan.findOne({ where: { user_id: userId, created_at: { [Op.eq]: RecommendedPlan.sequelize.literal(`(SELECT MAX(created_at) FROM recommended_plan WHERE user_id = ${userId})`) } } }); return latestPlan; }
方案二:更简洁的排序限制方式
通过倒序排序created_at并仅取第一条,实现相同效果,代码可读性更强:
const RecommendedPlan = require('../models/recommendedPlan'); // 替换为你的模型实际路径 async function getLatestRecommendedPlan(userId) { const latestPlan = await RecommendedPlan.findOne({ where: { user_id: userId }, order: [['created_at', 'DESC']], limit: 1 }); return latestPlan; }
两种方案均可得到目标结果,方案二在多数场景下性能更优,代码也更简洁。
内容的提问来源于stack exchange,提问作者Abhishek Bansal
相关产品推荐
相关产品推荐

