Sequelize - How to search multiple columns?

17,216

Solution 1

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 + '%' }
    ]
  }
});

Solution 2

Sequelize >= 4.12

Article.findAll({
 where = {
  [Op.or]: [
    { name: { [Op.like]: `%${req.query.query_string}%` } },
    { description: { [Op.like]: `%${req.query.query_string}%` } }
  ]
}
});

just fyi: mysql doesn't supports iLike ;)

Share:
17,216
waffl
Author by

waffl

Updated on July 27, 2022

Comments

  • waffl
    waffl almost 2 years

    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.