在前端开发中,我们经常需要从数据库中获取符合特定条件的数据。Sequelize 是一款 Node.js ORM,可以让我们更方便地操作数据库。在使用 Sequelize 进行条件查询时,有一些技巧可以帮助我们更快速和高效地完成目标。
基本的条件查询
查询所有满足某个特定条件的记录非常基本,可以使用 Sequelize 提供的 where 方法。例如,我们要查询一个 users 表中年龄大于 18 的用户:
const users = await User.findAll({
where: {
age: { [Op.gt]: 18 }
}
})上述代码中,[Op.gt] 表示“greater than”,即大于的意思。除此之外,Sequelize 还提供了以下操作符:
$eq(等于)$ne(不等于)$gt(大于)$gte(大于等于)$lt(小于)$lte(小于等于)$between(在某个范围内)$notBetween(不在某个范围内)$in(在某个集合中)$notIn(不在某个集合中)$like(和某个模式匹配)$notLike(和某个模式不匹配)
我们也可以使用多个操作符组合:
const users = await User.findAll({
where: {
age: { [Op.between]: [18, 25] },
name: { [Op.like]: '%David%' }
}
})上述代码中,我们查询了年龄在 18 ~ 25 之间且名字包含“David”的用户。
高级查询
除了基本的条件查询,Sequelize 还提供了许多高级查询方法,让我们可以更灵活地操作数据库。
复杂查询
有时候我们需要进行一些复杂的查询,比如嵌套查询。Sequelize 提供了嵌套查询的方法:
const users = await User.findAll({
where: {
id: {
[Op.in]: sequelize.literal(`SELECT user_id FROM posts WHERE title LIKE '%JavaScript%'`)
}
}
})上述代码中,我们使用了 Sequelize 提供的 sequelize.literal 方法,它可以让我们直接编写 SQL 语句进行查询。
分页查询
在实际开发中,我们通常需要对查询结果进行分页,这时候我们可以使用 limit 和 offset 方法:
const users = await User.findAll({
limit: 10, // 返回十个记录
offset: 20, // 从第 20 个记录开始
where: {
age: { [Op.gt]: 18 }
}
})排序查询
还可以对查询结果进行排序:
-- -------------------- ---- -------
----- ----- - ----- --------------
------ -
------- -------- -- --------
------------- ------ -- -----------------
--
------ -
---- - -------- -- -
-
--聚合查询
我们还可以进行一些聚合操作,比如统计某个表的记录数、求和、求平均数等:
const result = await User.findOne({
attributes: [
[sequelize.fn('COUNT', sequelize.col('id')), 'count'],
[sequelize.fn('AVG', sequelize.col('age')), 'averageAge']
]
})
console.log(result.toJSON()) // { count: 100, averageAge: 23.5 }上述代码中,我们使用了 Sequelize 提供的 sequelize.fn 和 sequelize.col 方法分别表示 SQL 中的聚合函数和列名。
总结
Sequelize 提供了丰富的查询方法,可以帮助我们更快速和高效地查询数据库。在使用时,我们要根据需要选择合适的操作符和方法,避免查询范围过大导致查询效率降低。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/645656a7968c7c53b0984147