介绍
Sequelize 是一个 Node.js ORM(对象关系映射)库,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server 等。Sequelize 的主要功能是将数据库中的数据转换为 JavaScript 对象,以便在 Node.js 应用程序中使用。在本文中,我们将介绍如何使用 Sequelize 实现数据的筛选与排序。
数据筛选
数据筛选是从数据库中选择特定数据的过程。Sequelize 提供了多种方法来实现数据筛选,包括 where、and、or、not、in、like 等。下面我们将分别介绍这些方法的用法。
where
where 方法用于指定筛选条件。它接受一个对象作为参数,该对象的键是表中的列名,值是要匹配的值。例如,我们可以使用 where 方法选择年龄大于 18 岁的用户:
User.findAll({ where: { age: { [Op.gt]: 18 } } });
and
and 方法用于指定多个筛选条件,所有条件必须同时满足。它接受一个数组作为参数,数组中的每个元素都是一个对象,表示一个筛选条件。例如,我们可以使用 and 方法选择年龄在 18 到 30 岁之间且性别为女的用户:
User.findAll({ where: { [Op.and]: [ { age: { [Op.between]: [18, 30] } }, { gender: 'female' } ] } });
or
or 方法用于指定多个筛选条件,其中任意一个条件满足即可。它接受一个数组作为参数,数组中的每个元素都是一个对象,表示一个筛选条件。例如,我们可以使用 or 方法选择年龄小于 18 岁或者性别为女的用户:
User.findAll({ where: { [Op.or]: [ { age: { [Op.lt]: 18 } }, { gender: 'female' } ] } });
not
not 方法用于取反一个筛选条件。它接受一个对象作为参数,该对象的键是表中的列名,值是要排除的值。例如,我们可以使用 not 方法选择年龄不等于 18 岁的用户:
User.findAll({ where: { age: { [Op.not]: 18 } } });
in
in 方法用于指定一个值是否属于一个集合。它接受一个对象作为参数,该对象的键是表中的列名,值是一个数组,表示要匹配的集合。例如,我们可以使用 in 方法选择年龄为 18、20、22 岁的用户:
User.findAll({ where: { age: { [Op.in]: [18, 20, 22] } } });
like
like 方法用于模糊匹配一个字符串。它接受一个对象作为参数,该对象的键是表中的列名,值是一个字符串,表示要匹配的模式。例如,我们可以使用 like 方法选择用户名以 "j" 开头的用户:
User.findAll({ where: { username: { [Op.like]: 'j%' } } });
数据排序
数据排序是将数据库中的数据按照特定顺序排列的过程。Sequelize 提供了多种方法来实现数据排序,包括 asc、desc 等。下面我们将分别介绍这些方法的用法。
asc
asc 方法用于按照升序排列数据。它接受一个字符串作为参数,表示要排序的列名。例如,我们可以使用 asc 方法按照年龄升序排列用户:
User.findAll({ order: [ ['age', 'asc'] ] });
desc
desc 方法用于按照降序排列数据。它接受一个字符串作为参数,表示要排序的列名。例如,我们可以使用 desc 方法按照年龄降序排列用户:
User.findAll({ order: [ ['age', 'desc'] ] });
示例代码
下面是一个完整的示例代码,演示如何使用 Sequelize 实现数据的筛选与排序:
// javascriptcn.com 代码示例 const { Sequelize, Op } = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql', host: 'localhost' }); const User = sequelize.define('user', { username: { type: Sequelize.STRING, allowNull: false }, age: { type: Sequelize.INTEGER, allowNull: false }, gender: { type: Sequelize.STRING, allowNull: false } }); async function main() { await sequelize.sync(); // 创建用户 await User.create({ username: 'Alice', age: 20, gender: 'female' }); await User.create({ username: 'Bob', age: 25, gender: 'male' }); await User.create({ username: 'Charlie', age: 30, gender: 'male' }); // 查询用户 const users = await User.findAll({ where: { [Op.or]: [ { age: { [Op.lt]: 18 } }, { gender: 'female' } ] }, order: [ ['age', 'desc'] ] }); console.log(users); } main();
该代码将输出年龄小于 18 岁或者性别为女性的用户,并按照年龄降序排列。输出结果如下:
// javascriptcn.com 代码示例 [ user { dataValues: { id: 1, username: 'Alice', age: 20, gender: 'female', createdAt: 2022-01-01T00:00:00.000Z, updatedAt: 2022-01-01T00:00:00.000Z }, _previousDataValues: { }, _changed: { }, _options: { isNewRecord: false, _schema: null, _schemaDelimiter: '', raw: true, attributes: [Array] }, isNewRecord: false } ]
总结
本文介绍了如何使用 Sequelize 实现数据的筛选与排序。Sequelize 提供了多种方法来实现数据筛选,包括 where、and、or、not、in、like 等,同时也提供了多种方法来实现数据排序,包括 asc、desc 等。这些方法可以帮助我们更加灵活地查询数据库中的数据,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6514e1ea95b1f8cacdd40969