
MongoDB 3.0 增删改查及聚合操作,pymongo
查询岗位名以及各岗位内的员工姓名:
发布日期:2025-04-14 14:12:20
浏览次数:9
分类:精选文章
本文共 3550 字,大约阅读时间需要 11 分钟。
MongoDB - 增删改查及聚合操作
数据库操作
创建及查看库
在 MongoDB 中,数据库相当于 SQL 中的数据库概念。使用以下命令可以创建或切换到指定数据库:
use DATABASE_NAME
查看当前选择的数据库:
db
查看所有存在的数据库:
show dbs
删除库
要删除一个数据库,首先需要切换到该数据库:
use database_name
然后执行删除命令:
db.dropDatabase()
集合操作
集合相当于 SQL 中的表。以下是基本的增删改查操作。
增
插入一个文档到集合中:
db.table1.insert({ "name": "alex" })
插入多个文档:
db.table1.insertMany([{ "name": "alex" }, { "name": "wupeiqi" }])
查
查询集合中的所有文档:
db.table1.find()
按条件查询:
db.table1.find({ "name": "alex" })
删
删除一个文档:
db.table1.deleteOne({ "name": "alex" })
删除多个符合条件的文档:
db.table1.deleteMany({ "name": "alex" })
删除所有文档:
db.table1.deleteMany({})
改
更新文档中的字段:
db.table1.update({ "name": "alex" }, { "$set": { "age": 10 } })
使用 $inc
进行加减操作:
db.table1.update({}, { "$inc": { "age": 1 } }, { "multi": true })
文件操作
插入
插入单个文档:
db.table1.insert({ "name": "alex", "age": 10 })
插入多个文档:
db.table1.insertMany([{ "name": "alex" }, { "name": "wupeiqi" }])
删
删除数组中的元素:
db.table1.deleteOne({ "hobbies": "read" })
使用 $pop
删除数组中的最后一个元素:
db.table1.deleteOne({ "hobbies": 1 })
使用 $pull
删除满足条件的元素:
db.table1.deleteMany({ "addr.country": "China" })
修改
简单修改:
db.table1.update({ "name": "alex" }, { "$set": { "age": 99 } })
加减操作:
db.table1.update({}, { "$inc": { "age": -10 } }, { "multi": true })
聚合操作
$match 和 $group
$match 用于过滤数据,$group 用于聚合数据。
示例:
db.emp.aggregate([ { "$match": { "post": "公务员" } }, { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } } }])
$project
用于投射字段,保留或隐藏字段:
db.emp.aggregate([ { "$project": { "name": 1, "post": 1, "age": 0 } }])
排序和限制
排序:
db.emp.find().sort({ "age": 1 })
分页:
db.emp.find().skip(5).limit(10)
获取数量:
db.table1.count({ "age": { "$gt": 30 } })
实践题
db.emp.aggregate([ { "$group": { "_id": "$post", "names": { "$push": "$name" } } }])
- 查询岗位名以及各岗位内包含的员工个数:
- 查询公司内男员工和女员工的个数:
- 查询岗位名以及各岗位的平均薪资、最高薪资、最低薪资:
- 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资:
- 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数:
- 查询各岗位平均薪资大于10000的岗位名、平均工资:
- 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资:
- 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序:
- 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列:
- 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列,取前1个:
db.emp.aggregate([ { "$group": { "_id": "$post", "count": { "$sum": 1 } } }])
db.emp.aggregate([ { "$group": { "_id": "$sex", "count": { "$sum": 1 } } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" }, "max_salary": { "$max": "$salary" }, "min_salary": { "$min": "$salary" } } }])
db.emp.aggregate([ { "$group": { "_id": "$sex", "avg_salary": { "$avg": "$salary" } } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "count": { "$sum": 1 }, "names": { "$push": "$name" } }, { "$match": { "count": { "$lt": 2 } } }, { "$project": { "_id": 0, "names": 1, "count": 1 } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } }, { "$match": { "avg_salary": { "$gt": 10000 } }, { "$project": { "_id": 1, "avg_salary": 1 } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } }, { "$match": { "avg_salary": { "$gt": 10000, "$lt": 20000 } }, { "$project": { "_id": 1, "avg_salary": 1 } }])
db.emp.aggregate([ { "$sort": { "age": 1, "hire_date": -1 } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } }, { "$match": { "avg_salary": { "$gt": 10000 } }, { "$sort": { "avg_salary": 1 } }])
db.emp.aggregate([ { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } }, { "$match": { "avg_salary": { "$gt": 10000 } }, { "$sort": { "avg_salary": -1 } }, { "$limit": 1 }, { "$project": { "date": new Date(), "平均工资": "$avg_salary", "_id": 0 } }])
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年05月09日 12时28分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Metasploit SCADA渗透测试实战
2025-04-13
Metasploit SQL注入漏洞渗透测试实战
2025-04-13
Metasploit Web服务器渗透测试实战
2025-04-13
Metasploit Web认证渗透测试实战
2025-04-13
Metasploit Windows AD渗透测试实战
2025-04-13
Metasploit 信息收集实战
2025-04-13
Metasploit 命令注入漏洞渗透测试实战
2025-04-13
Metasploit 客户端漏洞利用实战
2025-04-13
Metasploit 文件上传漏洞渗透测试实战
2025-04-13
Metasploit 文件包含与跨站请求伪造渗透测试实战
2025-04-13
Metasploit 渗透测试框架快速入门
2025-04-13
Meta最新视频生成工具:emu video技术报告解读
2025-04-13
MFC CEdit改变字体大小的方法
2025-04-13
MFC 打印预览 映射模式 坐标变换
2025-04-13
MFC不规则窗体
2025-04-13
MFC之处理消息映射的步骤...
2025-04-13
MFC对话框屏幕居中
2025-04-14
MFC工作笔记0002---MFC HelloWorld程序
2025-04-14
MFC工作笔记0003---WindowsAPI与MFC的关系
2025-04-14