Sequelize-如何搜索多个列
Sequelize - How to search multiple columns?
我有一个包含多列文章的数据库,希望能够搜索title
和description
。
目前,我有:
Article.findAll({
where: {
title: { like: '%' + searchQuery + '%' }
}
});
我如何也可以搜索描述?
我已经阅读了sequelize文档,甚至在Complex filtering / OR / NOT queries
部分,但这些示例似乎只解释了一列中的搜索。
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 + '%' }
]
}
});
Sequelize>=4.12
Article.findAll({
where = {
[Op.or]: [
{ name: { [Op.like]: `%${req.query.query_string}%` } },
{ description: { [Op.like]: `%${req.query.query_string}%` } }
]
}
});
只是提示:mysql不支持iLike;)
您应该使用这个:
where: {
[op.or]: [
{
model: {
[op.like]: `%${ req.query.search }%`
}
},
{
description: {
[op.like]: `%${ req.query.search }%`
}
}
]
}
您的问题是我第一次听说sequelize.js,但我查看了文档,发现了以下内容:
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
如果你想搜索Model Sequelize中的所有列,这里有一个例子,你将把每个列强制转换为varchar,以便能够使用ilike运算符并将它们推送到数组中,数组将是where子句。我的意思是,这个例子中的repo是sequelize模型。
async findFilterAndCountAll(pg: { limit : number, offset : number, sort:string, order: string, pfilter : any}) {
var filters = Array();
for (const key in this.repo.rawAttributes ) {
console.log(key);
filters.push(sequelize.where(
sequelize.cast(sequelize.col(key), 'varchar'),
{[Op.iLike]: `%tes%`}
))
}
return await this.repo.findAndCountAll({
limit : pg.limit,
offset : pg.offset,
order: [
[pg.order, pg.sort]
],
where : {
[Op.or]: filters
}
});
}
相关文章:
- 用程序搜索JQuery数据表中的文本
- 在html Select中添加搜索
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- 学生搜索项目jquery/javascript
- 用于搜索的聚合物嵌套绑定
- 在javascript中搜索具有重复值的两个数组中的匹配值
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 使用javascript搜索具有用户输入的数组
- 如何从谷歌自定义搜索下载搜索结果
- 数据表 + 列搜索 + 整体搜索协同工作 + 服务器端处理
- Javascript正则表达式,用于验证接收到的MySQL全文搜索的搜索字符串
- 如何解决区分大小写搜索的搜索输入问题
- 使用 Ember.js 构建搜索框搜索
- 搜索与搜索和替换
- 谷歌网站搜索捕获搜索提交和触发功能
- 谷歌地图API地点搜索获取搜索结果的数量
- 搜索.$也搜索id
- 使用list.js(搜索函数)搜索HTML表-修改以显示所有不包括搜索词的行
- 使用ajax调用进行搜索框搜索的自动建议