【MongoDB】二、MongoDB数据库的基本操作

news2024/11/17 6:01:04

【MongoDB】二、MongoDB数据库的基本操作

  • 实验目的
  • 实验内容
  • 任务一:
    • (1)创建数据库newdb
    • (2)在数据库newdb中创建集合mycollection
    • (3)在集合mycollection中插入以下数据:
    • (4)将标题为”MangoDB入门学习”更新为”MangoDB实践”
    • (5)删除集合mycollection中的数据
    • (6)删除集合mycollection
    • (7)删除数据库newdb
  • 任务二
    • (1)创建名称为自己姓名拼音缩写的数据库。
    • (2)在以自己姓名拼音缩写命名的数据库中创建集合students。
    • (3)在集合students中插入以下数据。
    • (4)将李慧英的英语成绩修改为88。
    • (5)删除姓名是李贞贤的学生信息。
    • (6)将张力的书架上的第二本书修改为“C#”。
    • (7)给王敏的成绩中添加一门课“physical”,成绩为89。
  • 任务三:文档简单查询
    • (1)统计中国学生的人数
    • (2)查询李姓学生的信息
    • (3)查询集合students中姓名为”王敏”的学生信息
    • (4)查询语文成绩大于80小于95的文档
    • (5)查询书架上有“MongoDB”这本书的学生的姓名和年龄
    • (6)查询书架上有“JAVA”或“JS”书的文档
    • (7)查询数学成绩小于60或大于90的学生的姓名
    • (8)查询英语成绩在60到90之间的学生的信息
    • (9)查询书架上有4本书的学生的信息
    • (10)查询国籍是“USA”或“China”的学生的姓名
    • (11)查询国籍是USA并且语文成绩大于80的学生的信息
  • 任务四:聚合操作
    • (1)查询软件技术和移动应用开发专业学生的平均年龄
    • (2)查看计算机应用技术专业男生和女生的总学分,最高学分和最低学分
    • (3)查询各个专业学生的平均成绩,第一个人的成绩和最后一个人的成绩
    • (4)统计各个专业的学生人数并按人数从多到少排序
    • (5)显示成绩排名第4和第5的学生的姓名,专业和成绩
    • (6)统计不同性别的学生姓名
    • (7)查询年龄大于19的男生、女生人数
  • 任务五:索引操作
    • (1)在集合students的字段age上创建单字段索引,并指定顺序为降序
    • (2)在集合students的字段major和字段credits上创建复合索引,指定字段major 为升序,字段credits为降序
    • (3)查询数据库stu中集合students的索引
    • (4)删除集合students字段age上的单字段索引
    • (5)删除集合students中的所有索引
  • 任务六:安全与访问控制
    • (1)在admin数据库中创建管理员用户“useradmin”,密码为“123456”,拥有userAdminAnyDatabase角色。
    • (2)开启用户访问控制:修改配置文件mongod.cfg,重启MongoDB服务
    • (3)使用管理员账户useradmin在数据库admin中创建一个用户“sturead”,密码“123456”,并且该用户只具有stu数据库的read权限
    • (4)新建连接,使用用户sturead连接数据库,并在stu数据库中创建用户“test”, 密码“123456”,使该用户具有stu数据库的readWrite权限。能否创建成功,为什么?
    • (5)使用管理员账户useradmin在为用户sturead添加对stu数据库的userAdmin角色。使用用户sturead连接数据库,并在stu数据库中创建用户“test”, 密码“123456”,使该用户具有stu数据库的readWrite权限。能否创建成功,为什么?
    • (6)修改sturead用户的密码为“sturead”
    • (7)删除用户sturead
  • 实验小结


实验目的

(1)能够使用mongo shell对数据库和集合进行操作。
(2)能够使用mongo shell对文档进行插入、更新及删除操作。
(3)总结mongo shell脚本常见语法错误的调试方法。
(4)能够使用find命令查询数据库中满足指定条件的文档。
(5)熟练使用 $group $limit $match $sort $project $skip等聚合管道操作符对文档进行查询、处理及分析。
(6)能够根据需要查看、创建、删除集合中的索引。
(7)列举MongoDB内置角色的权限,并理解MongoDB内置角色的权限。
(8)掌握开启用户访问控制的方法,并能够进行用户管理操作。


实验内容

任务一:

(1)创建数据库newdb

use newdb

(2)在数据库newdb中创建集合mycollection

db.createCollection("mycollection")

(3)在集合mycollection中插入以下数据:

{
title:”MangoDB入门学习”,
description:”MongoDB是一个NoSQL数据库”,
by:”数据库”,
tags:[MongoDB,DataBase,NoSQL]
}
db.mycollection.insertMany({title:"MangoDB入门学习",
description:"MongoDB是一个NoSQL数据库",
by:"数据库",
tags:["MongoDB","DataBase","NoSQL"]
})

(4)将标题为”MangoDB入门学习”更新为”MangoDB实践”

db.mycollection.update({title:"MangoDB入门学习"},{$set:{title:"MangoDB实践"}})

(5)删除集合mycollection中的数据

db.mycollection.remove({title:"MangoDB实践"})

(6)删除集合mycollection

db.mycollection.drop()

(7)删除数据库newdb

db.dropDatabase()

任务二

(1)创建名称为自己姓名拼音缩写的数据库。

use xxx

(2)在以自己姓名拼音缩写命名的数据库中创建集合students。

db.createCollection("students")

(3)在集合students中插入以下数据。

db.students.insertMany([
{name:"Jim",age:NumberInt(25),email:"75431457@qq.com",
score:{chinese:NumberInt(89),math:NumberInt(85),english:NumberInt(99)},country:"USA",
books:["JS","C++","EXTJS","MongoDB"]},
{name:"Tom",age:NumberInt(26),email:"214551267@qq.com",
score:{chinese:NumberInt(75),math:NumberInt(77),english:NumberInt(95)},country:"USA",
books:["PHP","JAVA","EXTJS","C++"]},
{name:"Lily",age:NumberInt(24),email:"344521234@qq.com",
score:{chinese:NumberInt(80),math:NumberInt(82),english:NumberInt(94)},country:"USA",
books:["JS","JAVA","C#","MongoDB"]},
{name:"李永",age:NumberInt(25),email:"214556745@qq.com",
score:{chinese:NumberInt(96),math:NumberInt(94),english:NumberInt(90)},country:"China",
books:["JS","JAVA","EXTJS", "MongoDB"]},
{name:"王敏",age:NumberInt(23),email:"274524359@qq.com",
score:{chinese:NumberInt(99),math:NumberInt(96),english:NumberInt(97)},country:"China",
books:["JS","C#","PHP", "MongoDB"]},
{name:"张力",age:NumberInt(22),email:"232435456@qq.com",
score:{chinese:NumberInt(89),math:NumberInt(97),english:NumberInt(89)},country:"China",
books:["JS","JAVA","C++", "MongoDB"]},
{name:"朴英俊",age:NumberInt(27),email:"645434239@qq.com",
score:{chinese:NumberInt(36),math:NumberInt(46),english:NumberInt(55)},country:"Korea",
books:["JS","JAVA", "EXTJS", "PHP"]},
{name:"李贞贤",age:NumberInt(24),email:"987555668@qq.com",
score:{chinese:NumberInt(35),math:NumberInt(75),english:NumberInt(64)},country:"Korea",
books:["JS","C#", "EXTJS", "MongoDB"]},
{name:"李慧英",age:NumberInt(26),email:"435567778@qq.com",
score:{chinese:NumberInt(45),math:NumberInt(63),english:NumberInt(77)},country:"Korea",
books:["JS","JAVA", "EXTJS", "MongoDB"]}
])

(4)将李慧英的英语成绩修改为88。

db.students.update({name:"李慧英的"},{$set:{"score.english":NumberInt(88)}})

(5)删除姓名是李贞贤的学生信息。

db.students.remove({name:"李贞贤"})

(6)将张力的书架上的第二本书修改为“C#”。

db.students.update({name:"张力"},{$set:{"books.1":"C#"}})

(7)给王敏的成绩中添加一门课“physical”,成绩为89。

db.students.update({name:"王敏"},{$set:{"score.physical":NumberInt(89)}})

任务三:文档简单查询

(1)统计中国学生的人数

db.students.find({country:"China"}).count()

(2)查询李姓学生的信息

db.students.find({name:/^/})

(3)查询集合students中姓名为”王敏”的学生信息

db.students.find({name:"王敏"})

(4)查询语文成绩大于80小于95的文档

db.students.find({"score.chinese":{$gt:80,$lt:95}}).pretty()

(5)查询书架上有“MongoDB”这本书的学生的姓名和年龄

db.students.find({books:"MongoDB"},{_id:0,name:1,age:1})

(6)查询书架上有“JAVA”或“JS”书的文档

db.students.find({books:{$in:["JAVA","JS"]}})

(7)查询数学成绩小于60或大于90的学生的姓名

db.students.find({$or:[{"score.math":{$lt:60}},{"score.math":{$gt:90}}]})

(8)查询英语成绩在60到90之间的学生的信息

db.students.find({"score.english":{$gte:60,$lte:90}})

(9)查询书架上有4本书的学生的信息

db.students.find({books:{$size:4}})

(10)查询国籍是“USA”或“China”的学生的姓名

db.students.find({$or:[{country:"China"},{country:"USA"}]})

db.students.find({"country":{$in:["China","USA"]}},{name:1})

(11)查询国籍是USA并且语文成绩大于80的学生的信息

db.students.find({$and:[{country:'USA'},
{"score.chinese":{$gt:80}}]},
{name:1,country:1,"score.chinese":1})

任务四:聚合操作

(1)查询软件技术和移动应用开发专业学生的平均年龄

db.students.aggregate([
{$match:{major:{$in:["软件技术","移动应用开发"]}}},
{$group:{_id:"$major",ageavg:{$avg:"$age"}}}
])

(2)查看计算机应用技术专业男生和女生的总学分,最高学分和最低学分

db.students.aggregate([
{$match:{major:"计算机应用技术"}},
{$group:{_id:"$sex",sum_cre:{$sum:"$credits"},
max_cre:{$max:"$credits"},min_cre:{$min:"$credits"}}}
])

(3)查询各个专业学生的平均成绩,第一个人的成绩和最后一个人的成绩

db.students.aggregate({
$group:{
_id:"$major",
avg_sco:{$avg:"$score"},
fir_sco:{$first:"$score"},
last_sco:{$last:"$score"},
}})

(4)统计各个专业的学生人数并按人数从多到少排序

db.students.aggregate([{
$group:{_id:"$major",
sum:{$sum:1}}},
{$sort:{sum:-1}}
])

(5)显示成绩排名第4和第5的学生的姓名,专业和成绩

db.students.aggregate([
{$sort:{"score":-1}},
{$skip:4},
{$limit:2},
{$project:{_id:0,name:1,major:1,score:1}}
])

(6)统计不同性别的学生姓名

db.students.aggregate({
$group:{_id:"$sex",
"name":{$push:"$name"}
}})

(7)查询年龄大于19的男生、女生人数

db.students.aggregate([
{$match:{age:{$gt:19}}},
{$group:{_id:"$sex",count:{$sum:1}}}
])

任务五:索引操作

(1)在集合students的字段age上创建单字段索引,并指定顺序为降序

db.students.createIndex({age:-1})

(2)在集合students的字段major和字段credits上创建复合索引,指定字段major 为升序,字段credits为降序

db.students.createIndex({major:1,credits:-1})

(3)查询数据库stu中集合students的索引

db.students.getIndexes()

(4)删除集合students字段age上的单字段索引

db.students.dropIndex("age_-1")

(5)删除集合students中的所有索引

db.students.dropIndexes()

任务六:安全与访问控制

(1)在admin数据库中创建管理员用户“useradmin”,密码为“123456”,拥有userAdminAnyDatabase角色。

use admin
db.createUser({
user:"useradmin",
pwd:"123456",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
})

(2)开启用户访问控制:修改配置文件mongod.cfg,重启MongoDB服务

security:
  authorization: enabled

在这里插入图片描述

(3)使用管理员账户useradmin在数据库admin中创建一个用户“sturead”,密码“123456”,并且该用户只具有stu数据库的read权限

use admin
db.createUser({
user:"sturead",
pwd:"123456",
roles:[{role:"read",db:"stu"}]
})

(4)新建连接,使用用户sturead连接数据库,并在stu数据库中创建用户“test”, 密码“123456”,使该用户具有stu数据库的readWrite权限。能否创建成功,为什么?

db.createUser({
user:"test",
pwd:"123456",
roles:[{role:"readWrite",db:"stu"}]
})

在这里插入图片描述
答:创建用户test失败,因为sturead用户对数据库stu只有读权限,没有管理权限。


(5)使用管理员账户useradmin在为用户sturead添加对stu数据库的userAdmin角色。使用用户sturead连接数据库,并在stu数据库中创建用户“test”, 密码“123456”,使该用户具有stu数据库的readWrite权限。能否创建成功,为什么?

db.grantRolesToUser("sturead",[{role:"userAdmin",db:"stu"}])
use stu
db.createUser({user:"test",pwd:"123456",roles:[{role:"readWrite",db:"stu"}]})

答:可以创建成功 因为给sturead用户添加了userAdmin权限(userAdmin权限允许用户向system.users集合写入,可以对指定数据库进行创建、删除操作和管理用户)。


(6)修改sturead用户的密码为“sturead”

db.changeUserPassword("sturead","sturead")
db.auth("sturead","sturead")

(7)删除用户sturead

use admin
db.dropUser("sturead")

实验小结

       通过本次实验,我熟练地使用Mongo Shell对数据库,集合,文档进行增删改的操作,以及流畅使用 $group $limit $match $sort $project $skip等聚合管道操作符对文档进行查询、处理及分析。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。最终将遇到的问题一一解决最终完成实验。
注意事项:
1、有疑问前,知识学习前,先用搜索。
2、熟读写基础知识,学得会不如学得牢。
3、选择交流平台,如QQ群,网站论坛等。
4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/486350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何安装 Auto GPT 4:分步指南

动动发财的小手,点个赞吧! 您对尝试最新最好的文本生成技术感到兴奋吗? Auto GPT 4 因其令人印象深刻的功能而广为人知,但启动和运行它似乎令人望而生畏。幸运的是,我们在这里[1]提供安装 Auto GPT 4 的分步指南。 1. …

快手sig3 48位-unidbg

研究某手app的小伙伴都了解sig3有两个版本,低版本的是42位,高版本的48位。 废话不多说,先抓个包: 上一个当前最新版本的48位sig3,我们以搜索接口为例,效果如图: 在上面可以看到使用unidbg的方式…

【深度学习】计算机视觉(11)——Faster RCNN(工具篇)

文章目录 1 gcc编译报错1.1 错误提示“ld: cannot find -lm/-lc/-lpthread”1.2 解决方法:安装glibc工具1.3 解决方法:修改sources.list1.4 解决方法:软连接 2 Permission denied3 运行报错3.1 module tensorflow has no attribute 3.2 No mo…

火山 xl,xa,xg,xk,xh,xm 六神签名参数

火山 xl,xa,xg,xk,xh,xm 六神签名参数 27/100 发布文章 weixin_38819889 未选择任何文件 new 纯属技术研究,如有侵权,请联系删除。 抓个包,在火山最新的15.6版本中,已经新增加了2个参数x-helios,x-medusa 前段时间do…

IDEA Java 第一个mybatis入门程序

文章目录 准备mysql 开始新建maven项目maven添加引用mybatis配置文件工具类创建实例类添加mappermappermapper.xml 测试类 发现问题org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.The error may…

[计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

一、前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期…

使用ffmpeg拼接两张图片

最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ffm…

KALI入门到高级【第六章】

预计更新第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…

Linux网络编程:基础知识

1. MAC地址和IP地址 IPV4:32位;8B 4 32bit IPV6:128位;4B 32 128bit,图中IPV6补全为:fe80:0000:0000:0000:6e3f:77c3:ceca:b5a7 MAC:48位; 4B 12 48bit (图中IPV6和MAC地址使用的16进制表示法&a…

QTDAY4

定时闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QTime> //时间类 #include <QTimerEvent> //定时器事件类 #include <QDateTime> //日期时间类 #include <QText…

052、牛客网算法面试必刷TOP101--二分查找/排序(230503)

文章目录 前言二分查找/排序1、BM17 二分查找-I2、BM18 二维数组中的查找3、BM19 寻找峰值4、BM20 数组中的逆序对5、BM21 旋转数组的最小数字6、BM22 比较版本号 总结 前言 本文记录自己刷&#xff0c;牛客网的面试必刷TOP101&#xff0c;地址&#xff1a;面试必刷TOP101–二…

【GAMES101】05 Rasterization(Triangles)

光栅化过程&#xff1a;将一系列变换后的三角形转换为像素的过程。 三角形在图形学中得到很多的应用。 最基础的多边形&#xff08;边数最少&#xff09;。任何多边形都可以拆成三角形。性质&#xff1a;三角形内部一定是平面的。三角形内外部定义非常清楚。定义三个顶点后&a…

libfacedetection 人脸检测库 检测速度慢的问题

目录 一、libfacedetection 性能介绍 英特尔CPU 使用AVX2指令集 使用AVX512指令集 嵌入式设备 二、加速检测速度 libfacedetetion的前向推理速度很快的原因 使用axv2加速指令 一、libfacedetection 性能介绍 在上一篇文章中&#xff0c;我发现使用摄像头检测&#xff0c;构…

C++入门——内联函数的介绍

目录 前言 内联函数 1. 概念 2.特性 前言 今天小编给大家带来的是内联函数的介绍&#xff0c;大家可能之前没有听过内联函数这个名词&#xff0c;那么今天就和小编一起认识一下这个朋友吧。 内联函数 我们每次在调用函数时都会开辟一个函数栈帧&#xff0c;那么过度的函数…

上海联影面试(部分)(未完全解析)

一面 Spring Boot为什么可以自启动&#xff0c;且变成一个web项目&#xff1f;本地连不上网&#xff0c;Maven缺一个jar包&#xff0c;怎么解决&#xff1f;linux用什么命令找到占用指定端口的进程&#xff0c;并杀掉&#xff1f;Answer by new bing: 查找被占用端口的PID&am…

单载波传输与多载波传输

一、单载波传输 1. 单载波基带传输&#xff1a;系统模型 信道h(t)的带宽为W T&#xff1a;符号周期&#xff0c;数据速率&#xff1a;R1/T&#xff0c;每秒传输R个符号&#xff0c;单位&#xff1a;Hz z(t)&#xff1a;加性噪声 g(t)带宽有限&#xff0c;时间无限&#xff0c…

AI 图像生成工具可以取代摄影师吗?让我们从原理开始聊聊

AI 的风已经吹向了每一个人&#xff0c;在这篇文章中我们一起来聊一聊 AI 图像生成的原理以及未来。 作为一个非职业的摄影爱好者&#xff0c;我通常会在 Instagram 上面搜罗各种各样的优质图片并将其放进我的收藏夹。其中&#xff0c;有一位我关注了很久的德国摄影师&#xff…

Linux常用快捷键

前言&#xff1a;由于需要&#xff0c;梳理了一下常用的快捷键&#xff0c;以便忘记时查找。 Linux系统快捷键&#xff1a;(Bash解释器) 1&#xff09;Tab键 补齐命令补齐路径显示当前目录下的所有目录 2&#xff09;清屏&#xff1a; clearCtrl L ( “L” 大小写均可 ) …

Cadence基础操作:ADE L仿真基础操作

仿真器启动 schematic视图左上角 launch 启动各种仿真器&#xff0c;ADE L界面左上角Launch 启动ADL XL 和ADE GXL。通过ADE L启动的ADEXL 会继承ADE L的各种设置&#xff0c;如变量、plot and save的点等等。 仿真器主要设置 1.仿真器选择&#xff1a;如图&#xff0c;Setup里…