2021年1月29日星期五

Use Sequelize to create a dynamic where clause based on number of items in the request body?

Have found similar answers through the search, but I can quite crack this one. I'm using Node, Express, and Sequelize. I have a working query (included below) but I would like to modify it to support a dynamic number playlistThemes, depending on the number of themes a user selects in the client, instead of always using the four as I've done below.

I'll need to loop over the playlistThemes object (or req.body.selectedThemes) and dynamically generate similar [Op.gt] queries for each theme. I'll then need to add those to my where clause, though I could probably break it out into steps?

I'm not sure, any ideas?

builder.post('/', async (req, res) => {    let playlistThemes = Object.fromEntries(Object.entries(req.body.selectedThemes));    customPlaylist = await db.songs.findAll({      where: {        [Op.and]: [          { intensity: { [Op.between]: [req.body.intensity[0], req.body.intensity[1]] } },           { dissonance: { [Op.between]: [req.body.dissonance[0], req.body.dissonance[1]] } },          { peculiarity: { [Op.between]: [req.body.peculiarity[0], req.body.peculiarity[1]] } },          // Want a dynamic number of the items below (min of 1 theme, max of 5)          { [playlistThemes[0].name]: { [Op.gt]: [playlistThemes[0].weight] } },           { [playlistThemes[1].name]: { [Op.gt]: [playlistThemes[1].weight] } },           { [playlistThemes[2].name]: { [Op.gt]: [playlistThemes[2].weight] } },           { [playlistThemes[3].name]: { [Op.gt]: [playlistThemes[3].weight] } },       ]}    });    return res.send(customPlaylist);      });  
https://stackoverflow.com/questions/65963820/use-sequelize-to-create-a-dynamic-where-clause-based-on-number-of-items-in-the-r January 30, 2021 at 09:34AM

没有评论:

发表评论