gpt4 book ai didi

javascript - 使用 Sequelize 根据请求正文中的项目数创建动态 where 子句?

转载 作者:行者123 更新时间:2023-12-03 22:24:44 24 4
gpt4 key购买 nike

通过搜索找到了类似的答案,但我可以破解这个答案。我正在使用 Node、Express 和 Sequelize。我有一个工作查询(包括在下面),但我想修改它以支持动态数量的播放列表主题,这取决于用户在客户端中选择的主题数量,而不是像我在下面所做的那样总是使用四个。
我需要遍历 playlistThemes 对象(或 req.body.selectedThemes)并为每个主题动态生成类似的 [Op.gt] 查询。然后我需要将它们添加到我的 where 子句中,尽管我可以将其分解为多个步骤?
我不确定,有什么想法吗?

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);

});

最佳答案

为了解决这个问题,您需要将 playlistThemes 转换为具有流动格式的对象(或字典)数组:{ [playlistThemes[i].name]: { [Op.gt]: playlistThemes[i].weight] } }要解决此问题,您可以使用 array map function 。为列表的每个元素创建一个具有所需格式的对象。
第一步是做映射:

const themes = playlistThemes.map((theme) => {
return { [theme.name]: { [Op.gt]: [theme.weight] } }
})
第二步是将新数组中的每个元素添加到搜索中。我们可以使用 ...themes 复制新数组的每个元素。这对 merge arrays 很有用。
最终代码如下:
  builder.post('/', async (req, res) => {
let playlistThemes = Object.fromEntries(Object.entries(req.body.selectedThemes));

const themes = playlistThemes.map((theme) => {
return { [theme.name]: { [Op.gt]: [theme.weight] } }
})

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]] } },
...themes
]}
});
return res.send(customPlaylist);
});

关于javascript - 使用 Sequelize 根据请求正文中的项目数创建动态 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65963820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com