MongoDB collection.aggregate() 方法

MongoDB 是一个 NoSQL 数据库,它以文档的形式存储数据,同时提供了许多用于数据分析和聚合的方法。其中之一就是 aggregate() 方法。这个方法可以用于对 MongoDB 集合进行聚合操作,支持 SQL 中的聚合操作,如 groupsortproject 等。

语法

aggregate() 方法的语法如下:

db.collection.aggregate( [ { <stage> }, ... ] )

其中,db.collection 是要进行聚合操作的集合名;<stage> 是聚合操作的阶段,可以是一个或多个阶段,多个阶段按顺序执行。

使用场景

aggregate() 方法通常用于以下场景:

  1. 数据分析和报表生成:通过聚合操作,可以统计并分析 MongoDB 集合中的数据,生成各种报表。
  2. 数据清洗和转换:通过聚合操作,可以对 MongoDB 集合中的数据进行清洗和转换,以便进行后续分析。
  3. 数据挖掘和建模:通过聚合操作,可以从 MongoDB 集合中提取特定的数据模式和规律,以便进行数据挖掘和建模。

示例

下面给出两个使用 aggregate() 方法的完整示例。

示例 1:统计每个城市的用户数量和平均年龄

假设有一个用户集合 users,其中每个用户文档都包含以下字段:_idnameagecity。现在需要统计每个城市的用户数量和平均年龄。可以使用以下代码:

db.users.aggregate([
  {
    $group: {
      _id: "$city",
      total_users: { $sum: 1 },
      avg_age: { $avg: "$age" }
    }
  },
  { $sort: { total_users: -1 } }
])

这个代码会对 users 集合进行聚合操作,首先使用 $group 阶段对城市进行分组,然后使用 $sum$avg 聚合操作分别统计总用户数和平均年龄,最后使用 $sort 阶段按总用户数从大到小排序。假设 users 集合中的数据如下:

{ _id: 1, name: "Alice", age: 25, city: "Beijing" }
{ _id: 2, name: "Bob", age: 30, city: "Shanghai" }
{ _id: 3, name: "Charlie", age: 35, city: "Beijing" }
{ _id: 4, name: "David", age: 40, city: "Shenzhen" }
{ _id: 5, name: "Emily", age: 25, city: "Beijing" }

则聚合操作的结果如下:

{ "_id" : "Beijing", "total_users" : 3, "avg_age" : 28.333333333333332 }
{ "_id" : "Shanghai", "total_users" : 1, "avg_age" : 30 }
{ "_id" : "Shenzhen", "total_users" :1, "avg_age" : 40 }

这个结果表明,北京有 3 个用户,平均年龄约为 28.33 岁;上海有 1 个用户,平均年龄为 30 岁;深圳有 1 个用户,平均年龄为 40 岁。

结论

MongoDB aggregate() 方法可以用于对 MongoDB 集合进行聚合操作,支持 SQL 中的聚合操作,如 groupsortproject 等。