博客
关于我
MongoDB 3.0 增删改查及聚合操作,pymongo
阅读量:796 次
发布时间:2023-02-09

本文共 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" } } }])
    1. 查询岗位名以及各岗位内包含的员工个数:
    2. db.emp.aggregate([  { "$group": { "_id": "$post", "count": { "$sum": 1 } } }])
      1. 查询公司内男员工和女员工的个数:
      2. db.emp.aggregate([  { "$group": { "_id": "$sex", "count": { "$sum": 1 } } }])
        1. 查询岗位名以及各岗位的平均薪资、最高薪资、最低薪资:
        2. db.emp.aggregate([  { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" }, "max_salary": { "$max": "$salary" }, "min_salary": { "$min": "$salary" } } }])
          1. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资:
          2. db.emp.aggregate([  { "$group": { "_id": "$sex", "avg_salary": { "$avg": "$salary" } } }])
            1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数:
            2. db.emp.aggregate([  { "$group": { "_id": "$post", "count": { "$sum": 1 }, "names": { "$push": "$name" } },  { "$match": { "count": { "$lt": 2 } } },  { "$project": { "_id": 0, "names": 1, "count": 1 } }])
              1. 查询各岗位平均薪资大于10000的岗位名、平均工资:
              2. db.emp.aggregate([  { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } },  { "$match": { "avg_salary": { "$gt": 10000 } },  { "$project": { "_id": 1, "avg_salary": 1 } }])
                1. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资:
                2. db.emp.aggregate([  { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } },  { "$match": { "avg_salary": { "$gt": 10000, "$lt": 20000 } },  { "$project": { "_id": 1, "avg_salary": 1 } }])
                  1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序:
                  2. db.emp.aggregate([  { "$sort": { "age": 1, "hire_date": -1 } }])
                    1. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列:
                    2. db.emp.aggregate([  { "$group": { "_id": "$post", "avg_salary": { "$avg": "$salary" } },  { "$match": { "avg_salary": { "$gt": 10000 } },  { "$sort": { "avg_salary": 1 } }])
                      1. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列,取前1个:
                      2. 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 } }])

    转载地址:http://kcffk.baihongyu.com/

    你可能感兴趣的文章
    Metasploit 文件包含与跨站请求伪造渗透测试实战
    查看>>
    Metasploit 渗透测试框架快速入门
    查看>>
    Meta最新视频生成工具:emu video技术报告解读
    查看>>
    MFC 打印预览 映射模式 坐标变换
    查看>>
    MFC不规则窗体
    查看>>
    MFC之处理消息映射的步骤...
    查看>>
    MFC对话框屏幕居中
    查看>>
    MFC工作笔记0002---MFC HelloWorld程序
    查看>>
    MFC工作笔记0003---WindowsAPI与MFC的关系
    查看>>
    MFC工作笔记0004---MFC中afx_msg是什么,afx_msg void function()是什么意思
    查看>>
    MFC工作笔记0005---::在vc++中是什么意思
    查看>>
    MFC工作笔记0006---#pragma warning(disable:4996)是什么意思
    查看>>
    MFC工作笔记0007---消息映射处理
    查看>>
    MFC工作笔记0008---UDP协议通信_sendto 和 recvfrom 浅析与示例
    查看>>
    MFC工作笔记0011---atoi的用法
    查看>>
    MFC常用函数
    查看>>
    MFC打印和打印预览功能
    查看>>
    MFC打造Java环境变量设置工具...
    查看>>
    MFC数据类型
    查看>>
    MFC显示JPG图片
    查看>>