You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的PyMongo实现MongoDB一对多查询及员工最多部门统计

用PyMongo找出员工数量最多的部门

完整实现代码

以下是包含MongoDB连接、演示数据插入及核心查询逻辑的完整代码:

from pymongo import MongoClient

# 连接本地MongoDB实例(远程/带认证的话,修改此处参数即可)
client = MongoClient('mongodb://localhost:27017/')
db = client['Mongodb_demo']

# 获取对应集合
employee_col = db['employee']
department_col = db['department']

# 插入演示数据(数据已存在可跳过,先清空集合避免重复)
department_data = [
    {'depid': 1.0, 'deptname': 'Marketing', 'dept_description': 'This is Marketing department.'},
    {'depid': 2.0, 'deptname': 'HR', 'dept_description': 'This is Human Resource department.'},
    {'depid': 3.0, 'deptname': 'Operations', 'dept_description': 'This is Operations department.'}
]
employee_data = [
    {'employeename': 'Rohan Patil', 'sal': 50000.0, 'employeeid': 'rohan.patil.512', 'depid': 2.0},
    {'employeename': 'Goldy Sharma', 'sal': 40000.0, 'employeeid': 'goldy.sharma.513', 'depid': 2.0},
    {'employeename': 'Venugopal Ayeer', 'sal': 45000.0, 'employeeid': 'venugopal.ayeer.511', 'depid': 2.0},
    {'employeename': 'Sudha Murti', 'sal': 45000.0, 'employeeid': 'sudha.murti.514', 'depid': 3.0},
    {'employeename': 'Rajesh Kumar', 'sal': 38000.0, 'employeeid': 'rajesh.kumar.515', 'depid': 1.0}
]

employee_col.delete_many({})
department_col.delete_many({})
department_col.insert_many(department_data)
employee_col.insert_many(employee_data)

# 构建聚合查询管道
pipeline = [
    # 按部门ID统计员工数量
    {
        '$group': {
            '_id': '$depid',
            'employee_count': {'$sum': 1}
        }
    },
    # 关联部门集合获取详细信息
    {
        '$lookup': {
            'from': 'department',
            'localField': '_id',
            'foreignField': 'depid',
            'as': 'dept_details'
        }
    },
    # 展开关联的部门信息数组
    {'$unwind': '$dept_details'},
    # 按员工数降序排序
    {'$sort': {'employee_count': -1}},
    # 只取排名第一的结果
    {'$limit': 1},
    # 整理输出格式
    {
        '$project': {
            '_id': 0,
            '部门ID': '$_id',
            '部门名称': '$dept_details.deptname',
            '部门描述': '$dept_details.dept_description',
            '员工数量': '$employee_count'
        }
    }
]

# 执行查询并转换为Python列表
result = list(employee_col.aggregate(pipeline))

# 输出结果
print("员工数量最多的部门:")
print(result)

关键逻辑说明

  1. 聚合管道拆解:
    • $group:按depid分组,统计每个部门的员工总数
    • $lookup:关联department集合,匹配部门的详细信息
    • $unwind:将关联得到的数组格式部门信息展开为单个文档
    • $sort:按员工数量降序排列,确保最多的部门排在首位
    • $limit:仅保留第一条结果,即员工数最多的部门
    • $project:自定义输出字段名和格式,让结果更易读
  2. 结果转换:用list()将MongoDB返回的游标对象转换为Python列表,方便后续处理或输出

运行结果

执行代码后会得到如下Python格式的结果:

[
    {
        '部门ID': 2.0,
        '部门名称': 'HR',
        '部门描述': 'This is Human Resource department.',
        '员工数量': 3
    }
]

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:05:43