最近在学习Sequelize的使用,刚好遇到有需求需要使用Sequelize的AND和OR条件,记录下自己遇到的问题。
使用样例(后面的代码测试都基于该样例上做的调整):
const andQuery = {
[Op.and]: [{ name: '123' }, { nick: '456' }],
};
const orQuery = {
[Op.or]: [
{ name: { [Op.like]: `${search}%` } },
{ nick: { [Op.like]: `${search}%` } },
],
};
const query = {
[Op.and]: [
{
[Op.or]: [{ id: [1, 2, 3] }, { id: { [Op.gt]: 10 } }],
},
{
[Op.or]: [
{ name: { [Op.like]: `${search}%` } },
{ nick: { [Op.like]: `${search}%` } },
],
},
],
};
注意事项:
1.[Op.and],[Op.or]是能当属性取出然后push数据的,但push的数据必须是里面已经定义的。
2.and与or嵌套使用时,push新数据时也要保证and和or里面的数据类型一致
3.$and和$or操作符在sequelize 5.0版本以上是被弃用了的,所以5.0以下可以使用$and和$or代替[Op.and] 和[Op.or]。5.0以上必须使用[Op.xx],使用$xx会报错的。当然,其他[Op.xx]操作符同理。