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

标签 node.js express sequelize.js

我使用 sequelize 作为 Node 和 mysql 数据库的 ORM。现在我想根据部分值从表中获取所有项目。示例:我寻找 Guitar 它应该返回:Guitars、Guitar Red 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 Strings 这样的路由我得到了结果,但是如果我尝试使用 localhost/guitar/Guitar 我得到了 {"message":"Success","data":[]}

最佳答案

您可以使用 LIKE 关键字来匹配与您传递的字符串类似的字符串,其中包含以下键字符:

  • _ 表示存在
  • 的任何字符
  • % 表示
  • 中的任意 1 个或多个字符

    因此,您正在寻找这样的东西
    results = await db.Guitars.findAll({
      where: {
        name: {
          [Op.like]: 'Guitar%'
        }
      }
    })
    

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

    关于node.js - 如何根据值的一部分从表中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186818/

    相关文章:

    javascript - 通用功能?

    node.js - 使用 fs.readdir 和 fs.statSync 返回 ENOENT, no such file or directory 错误

    javascript - 在 Express.js 应用程序的公共(public)文件夹中创建一个文件

    node.js - 如何在 Sequelize 中设置关联

    node.js - Nodejs Sequelize 关联/关系包括

    javascript - 给定 JSON 中的第一行是什么?

    node.js - express.js 中的第二个路由器或中间件路径

    python - 为什么在我使用复合主键时 AWS Lambda 返回 "The provided key element does not match the schema"?

    javascript - 尝试在 Node 中使用 request.js 库时出现错误

    javascript - 访问公共(public)脚本文件上的 Node 文件