在 Node.js 中进行数据库操作时,Sequelize 是一个很好的 ORM 框架。它允许我们通过使用 JavaScript 对象而不是 SQL 来实现数据库的操作,使得代码更加清晰易懂。
本文将针对 Sequelize 查询进行详解,包括基本查询、聚合查询、关联查询、跨数据库查询等多个方面的内容。
基本查询
Sequelize 提供了多种基本查询方法,以下是其中常用的一些。
1. findAll
-- -------------------- ---- ------- --------------- ------ - -- ---- -- ------ - -- ---- -- ----------- - -- ------- -- ------ -- ------ --
示例代码:
User.findAll({ where: { age: 18 }, order: [['createdAt', 'DESC']], attributes: ['name', 'age'], limit: 10 })
2. findOne
-- -------------------- ---- ------- --------------- ------ - -- ---- -- ------ - -- ---- -- ----------- - -- ------- - --
示例代码:
User.findOne({ where: { name: '小明' }, order: [['createdAt', 'DESC']], attributes: ['name', 'age'] })
3. findByPk
Model.findByPk(id, { attributes: [ // 需要返回的字段 ] })
示例代码:
User.findByPk(1, { attributes: ['name', 'age'] })
聚合查询
Sequelize 提供的聚合查询方法可以计算满足条件的记录数量、某个字段的最大值、最小值、平均值等。
1. count
Model.count({ where: { // 查询条件 } })
示例代码:
User.count({ where: { age: 18 } })
2. max
Model.max('fieldName', { where: { // 查询条件 } })
示例代码:
User.max('age', { where: { isStudent: true } })
3. min
Model.min('fieldName', { where: { // 查询条件 } })
示例代码:
User.min('age', { where: { isStudent: true } })
4. sum
Model.sum('fieldName', { where: { // 查询条件 } })
示例代码:
User.sum('salary', { where: { isManager: true } })
5. avg
Model.avg('fieldName', { where: { // 查询条件 } })
示例代码:
User.avg('score', { where: { isStudent: true } })
关联查询
关联查询可以获取两个或多个表中的数据,并将它们按照特定的方式组织在一起。
1. belongsTo
Model.belongsTo(TargetModel, { foreignKey: 'foreignKeyName' })
示例代码:
Post.belongsTo(User, { foreignKey: 'userId' })
2. hasMany
Model.hasMany(TargetModel, { foreignKey: 'foreignKeyName' })
示例代码:
User.hasMany(Post, { foreignKey: 'userId' })
3. belongsToMany
Model.belongsToMany(TargetModel, { through: 'tableName', foreignKey: 'foreignKeyName' })
示例代码:
User.belongsToMany(Project, { through: 'UserProject', foreignKey: 'userId' })
跨数据库查询
Sequelize 允许连接不同类型的数据库,包括 MySQL、PostgreSQL、SQLite 等。
1. 查询 MySQL 数据库
const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql' })
2. 查询 PostgreSQL 数据库
const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'postgres' })
3. 查询 SQLite 数据库
const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'sqlite', storage: 'path/to/database.sqlite' })
总结
通过本文的介绍,读者可以掌握 Sequelize 查询的各类操作,包括基本查询、聚合查询、关联查询、跨数据库查询等。通过深入理解这些查询操作,可以更加熟练地进行数据库操作,并为实际开发提供参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a5067b48841e9894176ba6