在开发 Web 应用程序时,我们通常需要从数据库中检索数据并对其进行分组。Sequelize 是一个流行的 Node.js ORM(对象关系映射)库,它可以方便地访问和操作数据库。在本文中,我们将深入探讨如何使用 Sequelize 实现分组查询。
准备工作
在使用 Sequelize 进行分组查询之前,我们需要先安装它。可以通过 npm 安装 Sequelize:
npm install --save sequelize
我们还需要一个数据库来测试我们的代码。在本文中,我们将使用 MySQL 数据库。可以使用以下命令安装 MySQL:
npm install --save mysql2
接下来,我们需要创建一个数据库并创建一个表来存储数据。下面是一个示例 SQL 命令,可以在 MySQL 中执行:
-- -------------------- ---- ------- ------ -------- ----------- --- ----------- ------ ----- ----- - -- --- ------- --- --------------- ---- ------------- --- ---- ---- ------------ -- ------ ---- ----- ------ ---- ----- ------ --------- --- ---- ------- ------- --- ---- ---------- ----------- --- ----------- --------- --- ----------- ------- --- --------- --------- --- -----------
现在我们已经有了一个名为 mydatabase
的数据库和一个名为 users
的表,其中包含六个用户的数据。
分组查询
Sequelize 提供了多种方法来执行分组查询。在本文中,我们将介绍三种最常见的方法:findAll
、findAndCountAll
和 query
。
findAll
方法
findAll
方法可以使用 group
选项执行分组查询。下面是一个示例代码:
-- -------------------- ---- ------- ----- - ---------- ------ --------- - - --------------------- ----- --------- - --- ------------------------------------------------------------- ----- ---- ------- ----- -- ----------- ----- ----------------- ---- ------------------ ----- ---------------- -- - ---------- ---------- ------ --- ------ -- -- - ----- ------ - ----- -------------- ----------- -------- ---------------------- --------------------- ---------- ------ -------- --- -------------------- -----
在上面的代码中,我们首先定义了一个名为 User
的模型,该模型映射到数据库中的 users
表。然后,我们使用 findAll
方法执行分组查询。attributes
选项用于指定要返回的列,其中包括 city
列和使用 Sequelize.fn
函数计算的 count
列。group
选项用于指定要分组的列,这里我们使用 city
列进行分组。最后,我们打印查询结果。
运行上面的代码,将输出以下结果:
[ { city: 'Chicago', count: '1' }, { city: 'Houston', count: '1' }, { city: 'Los Angeles', count: '1' }, { city: 'Miami', count: '1' }, { city: 'New York', count: '1' }, { city: 'Seattle', count: '1' } ]
上面的结果显示了每个城市中有多少个用户。
findAndCountAll
方法
findAndCountAll
方法也可以使用 group
选项执行分组查询。下面是一个示例代码:
(async () => { const result = await User.findAndCountAll({ attributes: ['city', [Sequelize.fn('COUNT', Sequelize.col('id')), 'count']], group: ['city'] }); console.log(result.rows); })();
在上面的代码中,我们使用 findAndCountAll
方法执行分组查询。attributes
和 group
选项的用法与 findAll
方法相同。不同之处在于 findAndCountAll
方法返回一个对象,其中包括一个 rows
属性,该属性包含查询结果的数组。我们打印查询结果的 rows
属性。
运行上面的代码,将输出与 findAll
方法相同的结果。
query
方法
query
方法可以使用 SQL 查询字符串执行分组查询。下面是一个示例代码:
(async () => { const [result, metadata] = await sequelize.query(` SELECT city, COUNT(id) AS count FROM users GROUP BY city `); console.log(result); })();
在上面的代码中,我们使用 query
方法执行分组查询。我们通过 SQL 查询字符串指定查询,并使用 COUNT
函数计算每个城市中有多少个用户。我们将查询结果存储在 result
变量中,并打印它。
运行上面的代码,将输出与前两个示例相同的结果。
结论
在本文中,我们深入探讨了如何在 Sequelize 中实现分组查询。我们介绍了三种最常见的方法:findAll
、findAndCountAll
和 query
。这些方法可帮助我们轻松地从数据库中检索数据并对其进行分组。希望这篇文章对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6757edc87986361a542745e9