Skip to content
Advertisement

Sequelize – How to search multiple columns?

I have a database of articles with several columns and would like to be able to search both title and description.

Currently, I have:

Article.findAll({
  where: {
    title: { like: '%' + searchQuery + '%' }
  }
});

How can I also search the description as well?

I’ve read through the sequelize documentation, even in the Complex filtering / OR / NOT queries section, but the examples only seem to explain searching in one column.

Advertisement

Answer

Sequelize >= 4.12

const Op = Sequelize.Op;
Article.findAll({
  where: {
    title: { [Op.like]: '%' + searchQuery + '%' },
    description: { [Op.like]: '%' + searchQuery2 + '%' }
  }
});

Sequelize < 4.12

Article.findAll({
  where: {
    title: { like: '%' + searchQuery + '%' },
    description: { like: '%' + searchQuery2 + '%' }
  }
});

The above will make sure title includes searchQuery and description includes searchQuery2. If you however would like to get results back when an Article includes one of the two, the following query should work:

Sequelize >= 4.12

const Op = Sequelize.Op;
Article.findAll({
  where: {
    [Op.or]: [
     title: { [Op.like]: '%' + searchQuery + '%' },
     description: { [Op.like]: '%' + searchQuery2 + '%' }
    ]
  }
});

Sequelize < 4.12

Article.findAll({
  where: {
    $or: [
     title: { like: '%' + searchQuery + '%' },
     description: { like: '%' + searchQuery2 + '%' }
    ]
  }
});
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement