如何根据值的一部分从表中获取数据?

时间:2019-05-17 12:52:08

标签: node.js express sequelize.js

我正在将sequelize作为ORM用于节点和mysql数据库。现在,我想根据部分价值从表中获取所有项目。例如:我寻找吉它应该返回:吉它,吉它红6弦等...

const getGuitarsName = async name => {
    let rslts= undefined

    try {
        results = await db.Guitars.findAll({
            where: {
                name
            }
        })
    } catch(err) {
        return {success: false}
    }

    return {success: true, rslts}
}

在路由器上我也有类似的东西:

router.get('/guitar/:gitName', async (req, res) => {
    const gitName = req.params.gitName
    const data = await guitarService.getSingleName(gitName)

    if(!data.success) return responses.throwError(res)

    return responses.throwSuccess(res, data.results)
})

因此,如果我使用类似localhost / guitar / Guitar Red 6的路由,则会得到结果,但是如果我尝试使用localhost / guitar / Guitar,则会得到{“ message”:“ Success”,“ data”:[]}

1 个答案:

答案 0 :(得分:1)

您可以使用LIKE关键字来匹配与您传递的字符串相似的字符串,并带有以下关键字符:

  • _表示那里的任何字符
  • %表示那里有1个或更多字符

因此,您正在寻找类似的东西

results = await db.Guitars.findAll({
  where: {
    name: {
      [Op.like]: 'Guitar%'
    }
  }
})

此外,如果您使用的是PostgreSQL,则可以使用与ILIKE相同的[Op.ilike]LIKE)运算符,但不区分大小写。参见:http://docs.sequelizejs.com/manual/querying.html