如何使用Sequelize.js按tags分组查询userblogs表的博客列表
你期望的SQL查询逻辑如下:
select max(id) as id, max(blogdetails) as blog, tags, count(tags) as tagcount from userblogs group by tags;
你当前尝试的Sequelize代码:
app.get('/service/listofblogs', async (req, res) => { try { const blogData = await BlogModel.findAll( {attributes: ['blogdetails', 'tags']}, { group: ['tags'] } ); res.status(200).json({ blogData }); } catch (e) { res.status(500).json({ message: e.message }); } });
修正后的代码
你的现有代码未实现目标SQL中的聚合逻辑(max和count计算),需要借助Sequelize的fn和col方法调用SQL聚合函数,调整后代码如下:
const { fn, col } = require('sequelize'); app.get('/service/listofblogs', async (req, res) => { try { const blogData = await BlogModel.findAll({ attributes: [ [fn('max', col('id')), 'id'], [fn('max', col('blogdetails')), 'blog'], 'tags', [fn('count', col('tags')), 'tagcount'] ], group: ['tags'] }); res.status(200).json({ blogData }); } catch (e) { res.status(500).json({ message: e.message }); } });
说明
这段代码会生成与目标SQL完全一致的查询:按tags分组后,获取每组最大的id、最大的blogdetails(别名blog)、分组的tags值,以及该标签对应的博客数量(别名tagcount)。
内容的提问来源于stack exchange,提问作者soccerway
相关产品推荐
相关产品推荐

