MongoDB collection.aggregate() 方法
MongoDB 是一个 NoSQL 数据库,它以文档的形式存储数据,同时提供了许多用于数据分析和聚合的方法。其中之一就是 aggregate()
方法。这个方法可以用于对 MongoDB 集合进行聚合操作,支持 SQL 中的聚合操作,如 group
、sort
、project
等。
语法
aggregate()
方法的语法如下:
db.collection.aggregate( [ { <stage> }, ... ] )
其中,db.collection
是要进行聚合操作的集合名;<stage>
是聚合操作的阶段,可以是一个或多个阶段,多个阶段按顺序执行。
使用场景
aggregate()
方法通常用于以下场景:
- 数据分析和报表生成:通过聚合操作,可以统计并分析 MongoDB 集合中的数据,生成各种报表。
- 数据清洗和转换:通过聚合操作,可以对 MongoDB 集合中的数据进行清洗和转换,以便进行后续分析。
- 数据挖掘和建模:通过聚合操作,可以从 MongoDB 集合中提取特定的数据模式和规律,以便进行数据挖掘和建模。
示例
下面给出两个使用 aggregate()
方法的完整示例。
示例 1:统计每个城市的用户数量和平均年龄
假设有一个用户集合 users,其中每个用户文档都包含以下字段:_id
、name
、age
、city
。现在需要统计每个城市的用户数量和平均年龄。可以使用以下代码:
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 中的聚合操作,如 group
、sort
、project
等。