Есть ли способ включить массив в предложение where: $ or с помощью sequelize?

#javascript #mysql #node.js #express #sequelize.js

#javascript #mysql #node.js #выразить #sequelize.js

Вопрос:

У меня есть массив идентификаторов teamsIdsSelected = ['1', '5', .., 'X']

Затем из моей таблицы с именем ‘Challenge’ я хочу получить все вызовы, которые связаны с каждым TeamID из массива teamsIdsSelected. Пока это то, что я пробовал:

  1. Используя эту функцию:
     createWhereClause(column, field) {
        return models.sequelize.where(
            models.sequelize.literal(`${column} in (`),
            `'${field}'`,
            models.sequelize.literal(')'))
    },
  
  1. Решение проблем таким образом:
     const challenges = await Challenge.findAndCountAll({
        where: {
            team_id: createWhereClause(team_id, teamsIdsSelected)
        }
    })
  

Но это не работает, я получаю вызов только с team_id, равным последнему элементу teamsIdsSelected = teamsIdsSelected.slice(-1)[0]
Например, если teamsIdsSelected = ['1', '4', '7'] , предложение where в конце (когда я смотрю на журнал) является только "where challenge.team_id = 7" .

Что мне действительно хотелось бы, так это условие OR, которое принимало бы все вызовы, соответствующие 1, 4 или 7, в качестве team_id. Есть ли быстрый способ сделать это без создания цикла for?

Дайте мне знать, если вам нужна более точная информация о моей проблеме. Спасибо.

Комментарии:

1. Op.or или Op.in docs.sequelizejs.com/manual/querying.html#operators

2. @bato3 большое спасибо, я не знал о op.in ! как мне обозначить ваш комментарий в качестве ответа?

Ответ №1:

 const challenges = await Challenge.findAndCountAll({
    where: {
        team_id: { [Op.in]: teamsIdsSelected }
    }
})