我正在将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”:[]}
答案 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