Sequelize - 如何搜索多列?
Sequelize - How to search multiple columns?
我有一个包含多列文章的数据库,我希望能够同时搜索 title
和 description
。
目前,我有:
Article.findAll({
where: {
title: { like: '%' + searchQuery + '%' }
}
});
我怎样才能同时搜索描述?
我通读了 the sequelize documentation,甚至在 Complex filtering / OR / NOT queries
部分,但示例似乎只解释了在一栏中的搜索。
你的问题是我第一次听说 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
续集 >= 4.12
const Op = Sequelize.Op;
Article.findAll({
where: {
title: { [Op.like]: '%' + searchQuery + '%' },
description: { [Op.like]: '%' + searchQuery2 + '%' }
}
});
续集 < 4.12
Article.findAll({
where: {
title: { like: '%' + searchQuery + '%' },
description: { like: '%' + searchQuery2 + '%' }
}
});
以上将确保 title
包括 searchQuery
和 description
包括 searchQuery2
。但是,如果您希望在文章包含两者之一时返回结果,则以下查询应该有效:
续集 >= 4.12
const Op = Sequelize.Op;
Article.findAll({
where: {
[Op.or]: [
title: { [Op.like]: '%' + searchQuery + '%' },
description: { [Op.like]: '%' + searchQuery2 + '%' }
]
}
});
续集 < 4.12
Article.findAll({
where: {
$or: [
title: { like: '%' + searchQuery + '%' },
description: { like: '%' + searchQuery2 + '%' }
]
}
});
续集 >= 4.12
Article.findAll({
where = {
[Op.or]: [
{ name: { [Op.like]: `%${req.query.query_string}%` } },
{ description: { [Op.like]: `%${req.query.query_string}%` } }
]
}
});
仅供参考:mysql 不支持 iLike ;)
我有一个包含多列文章的数据库,我希望能够同时搜索 title
和 description
。
目前,我有:
Article.findAll({
where: {
title: { like: '%' + searchQuery + '%' }
}
});
我怎样才能同时搜索描述?
我通读了 the sequelize documentation,甚至在 Complex filtering / OR / NOT queries
部分,但示例似乎只解释了在一栏中的搜索。
你的问题是我第一次听说 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
续集 >= 4.12
const Op = Sequelize.Op;
Article.findAll({
where: {
title: { [Op.like]: '%' + searchQuery + '%' },
description: { [Op.like]: '%' + searchQuery2 + '%' }
}
});
续集 < 4.12
Article.findAll({
where: {
title: { like: '%' + searchQuery + '%' },
description: { like: '%' + searchQuery2 + '%' }
}
});
以上将确保 title
包括 searchQuery
和 description
包括 searchQuery2
。但是,如果您希望在文章包含两者之一时返回结果,则以下查询应该有效:
续集 >= 4.12
const Op = Sequelize.Op;
Article.findAll({
where: {
[Op.or]: [
title: { [Op.like]: '%' + searchQuery + '%' },
description: { [Op.like]: '%' + searchQuery2 + '%' }
]
}
});
续集 < 4.12
Article.findAll({
where: {
$or: [
title: { like: '%' + searchQuery + '%' },
description: { like: '%' + searchQuery2 + '%' }
]
}
});
续集 >= 4.12
Article.findAll({
where = {
[Op.or]: [
{ name: { [Op.like]: `%${req.query.query_string}%` } },
{ description: { [Op.like]: `%${req.query.query_string}%` } }
]
}
});
仅供参考:mysql 不支持 iLike ;)