Sequelize - 如何搜索多个列?

时间:2015-12-13 20:11:36

标签: javascript sql node.js sequelize.js

我有一个包含多个专栏的文章数据库,希望能够同时搜索titledescription

目前,我有:

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

我怎样才能搜索说明?

我已经阅读了the sequelize documentation,即使在Complex filtering / OR / NOT queries部分也是如此,但这些示例似乎只能解释在一栏中搜索。

3 个答案:

答案 0 :(得分:7)

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

以上内容将确保title包括searchQuery description包括searchQuery2。如果您希望在文章包含两者之一时返回结果,则以下查询应该有效:

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

答案 1 :(得分:1)

序列化> = 4.12

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

仅供参考:mysql不支持iLike;)

答案 2 :(得分:0)

你的问题是我第一次听说sequelize.js,但我看了一眼doco并发现了这个:

Project.findOne({
  where: {
    name: 'a project',
    $or: [
      { id: [1,2,3] },
      { id: { $gt: 10 } }
    ]
  }
})

Project.findOne({
  where: {
    name: 'a project',
    id: {
      $or: [
        [1,2,3],
        { $gt: 10 }
      ]
    }
  }
})

两段代码都将生成以下内容:

SELECT *
FROM `Projects`
WHERE (
  `Projects`.`name` = 'a project'
   AND (`Projects`.`id` IN (1,2,3) OR `Projects`.`id` > 10)
)
LIMIT 1;

这些示例上方的部分提供了允许的各种条款,包括$and$or

Project.findAll({
  where: {
    id: {
      $and: {a: 5}           // AND (a = 5)
      $or: [{a: 5}, {a: 6}]  // (a = 5 OR a = 6)
  ... etc