Python中使用MongoDB进行数据聚合的实用例子

2023-04-15 00:00:00 聚合 例子 实用

为了演示Python中使用MongoDB进行数据聚合,我们可以假设有一个包含用户信息的MongoDB集合,我们想要按照性别和职业对用户进行分组,并计算每个组中用户的平均年龄和平均工资。
我们首先创建一个包含用户信息的MongoDB集合,其中包括以下字段:
- name:用户姓名
- age:用户年龄
- gender:用户性别
- occupation:用户职业
- salary:用户工资
下面是一个示例,我们插入了一些用户信息:

db.users.insertMany([
  { name: 'Anna', age: 25, gender: 'female', occupation: 'engineer', salary: 50000 },
  { name: 'Bob', age: 35, gender: 'male', occupation: 'designer', salary: 60000 },
  { name: 'Charlie', age: 30, gender: 'male', occupation: 'engineer', salary: 70000 },
  { name: 'David', age: 40, gender: 'male', occupation: 'manager', salary: 80000 },
  { name: 'Eve', age: 45, gender: 'female', occupation: 'manager', salary: 90000 },
  { name: 'Frank', age: 50, gender: 'male', occupation: 'designer', salary: 100000 }
]);

现在我们可以使用Python中的pymongo库来查询数据,并对数据进行聚合。以下是我们可以使用的代码:

# 导入pymongo库
from pymongo import MongoClient
# 连接MongoDB数据库
client = MongoClient()
# 选择数据库和集合
db = client['mydb']
collection = db['users']
# 定义聚合管道
pipeline = [
    { "$group": {
        "_id": { "gender": "$gender", "occupation": "$occupation" },
        "avgAge": { "$avg": "$age" },
        "avgSalary": { "$avg": "$salary" }
    }},
    { "$sort": { "_id": 1 } }
]
# 执行聚合操作
result = collection.aggregate(pipeline)
# 输出结果
for group in result:
    print("Gender:", group["_id"]["gender"].capitalize())
    print("Occupation:", group["_id"]["occupation"].capitalize())
    print("Average age:", group["avgAge"])
    print("Average salary:", group["avgSalary"])

在该代码中,我们首先使用pymongo库连接到MongoDB数据库。然后我们选择要查询的数据库和集合。接下来,我们定义了一个聚合管道,用于对用户数据进行聚合操作。这个管道包括两个操作:
- $group:用于按性别和职业对用户进行分组,并计算每个组中用户的平均年龄和平均工资。
- $sort:用于按性别和职业对结果进行排序。
最后,我们执行了聚合操作,并使用for循环遍历聚合结果并输出数据。
对于以上的示例数据,我们可以得到以下输出结果:

Gender: Female
Occupation: Engineer
Average age: 25.0
Average salary: 50000.0
Gender: Female
Occupation: Manager
Average age: 45.0
Average salary: 90000.0
Gender: Male
Occupation: Designer
Average age: 42.5
Average salary: 80000.0
Gender: Male
Occupation: Engineer
Average age: 30.0
Average salary: 70000.0
Gender: Male
Occupation: Manager
Average age: 40.0
Average salary: 80000.0

该聚合操作成功按照性别和职业对用户进行了分组,并计算了每个组的平均年龄和平均工资。

相关文章