MongoDB实验——MongoDB shell操作

MongoDB shell操作

实验原理

MongoDB shell是一个可执行文件,是MongoDB自带的一个交互式JavaScript shell,位于MongoDB安装路径下的/bin文件夹中。要启动MongoDB shell,可执行命令mongo。这将在控制台提示符中启动该shell,MongoDB shell提供了多个命令,下面列出了多个MongoDB shell命令及其用途。

image-20221014215526918

一、MongoDB shell脚本编程

1.使用命令行编程–eval执行JavaScript表达式

​ 参数–eval 接受一个 JavaScript 字符串或 JavaScript 文件,下面的命令启动 MongoDB shell 端,连接到数据库 test,对该数据库执行 db.getCollectionNames(),并以 JSON 字符串的方式输出结果。

步骤:

1)在 test 数据库中新建集合 student,并添加文档。命令如下:

MongoDB shell 端操作

>use test

>db.student.insert({sno:”001”,sname:”zhangsan”})

>exit

2)在控制台输入:

> mongo test --eval “printjson(db.getCollectionNames())”

image-20221014225002936

2、在 MongoDB shell 中使用方法 load()来执行脚本

1)创建 shell_script.js 文件,该文件的路径为 D:\Junior Experiment\nosql\NoSQL guide book\test1document\shell_script.js 文件代码如下:

print("Hostname:");print("\t"+hostname());print("Date:");print("\t"+Date());db = connect("localhost/admin");print("Admin Collections:");printjson(db.getCollectionNames());

2)执行命令 mongo 文件地址+shell_script.js。命令运行结果如图所示。

image-20221015091614832

3、在命令 mongo 中指定要执行的 JavaScript 文件

​ MongoDB shell 加 载 并 执 行 脚 本 文 件 generate_words.js。 假设该文件的路径为

D:\JuniorExperiment\nosql\NoSQLguidebook\test1document\generate_words.js。

1)在 MongoDB shell 端输入 load(“D:\JuniorExperiment\nosql\NoSQLguidebook\test1document\generate_words.js”)(因此地址太长,我换了个文件路径)

image-20221015093917124

2)输入命令 show dbs,可以看到生成自定义数据库 words。

3)输入命令 use words,切换到 words 数据库。

4)输入命令 show collections,查看 words 数据库所包含的集合名称。命令执行结果如图所示。

image-20221015094104309

5)输入命令 db.word_stats.find().pretty(),查看 word_stats 集合中的所有文档。 命令执行结果如图所示。

image-20221015094351269

二、MongoDB shell操作

实验内容

练习在MongoDB中创建集合、删除集合、插入数据、更新数据、删除数据、查询数据等。

实验步骤

1.启动MongoDB shell。

image-20221014220036475

2.切换到admin数据库,使用root账户

image-20221014220420094

给admin账户授权,出现连接失败Error: Authentication failed.。导致robomongo无法连接

解决方法是手动添加admin账户,创建成功后,再次db.auth(‘root’,‘strongs’),返回1

image-20221015101018782

3.查看当前数据库状态

image-20221015101129224

4.显示当前MongoDB版本

image-20221015101221215

5.查询本地所有数据库名称

image-20221015101438210

6.切换至mydb数据库,如果该数据库不存在,则会在插入第一条数据后创建该数据库。

image-20221015102105065

7.创建集合(集合相当于关系数据库的table)

image-20221015102213620

8.查询当前库下的所有集合(collection)

image-20221015102255718

9.查询当前库下的所有集合(collection)

image-20221015102336376

10.向集合mycollection中插入数据。(如果集合不存在,在插入数据时,MongDB会自动创建集合)

image-20221015103133623

11.添加数据使用insert方法,如果添加文档也可以使用先声明对象再添加,例如:

image-20221015104901354

image-20221015104941859

12.MongoDB会为每个插入的对象自动生成一个“_id”的值,在插入的时候也可以自己指定这个值,例如:

image-20221015105338678

13.查询集合mycollection中的数据

image-20221015105437434

MongoDB提供两种更新操作:update()和save()

①update()更新操作至少需要两个参数,它的语法为:db.collection.update( criteria, objNew, upsert, multi )

criteria:update的查询条件,类似sql update查询内where后面的值。

objNew:update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set 后面的值。

upsert:如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi:MongoDB默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

14.根据username修改salary,将username为’zhangyu’的数据,salary提升至600

image-20221015114835280

15.将username为‘wangkaiyue’的数据age字段数值增加1

image-20221015124059839

②save()的语法为:db.collection.save( x ),x就是要更新的对象,只能是单条记录。也可以用 Save执行插入操作,如果系统中没有相同的"_id"就执行插入操作,有的话就执行覆盖掉原来的值,执行更新操作。

16.更新_id为10000001的数据。

image-20221015125728327

17.再次查询mycollection集合,验证以上更新操作

image-20221015125819692

18.删除username为‘yuhaowen’的数据。

image-20221015130006073

19.删除集合mycollection中全部数据

image-20221015130048687

删除语法如下:

db.mycollection.remove(<query>,{justOne:<boolean>,writeConcern:<document>})

参数说明:

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档。默认false

writeConcern :(可选)抛出异常的级别。

20.重命名集合,mycollection改为mcollection

image-20221015130404807

21.删除集合mcollection

image-20221015130436672

22.删除当前数据库

image-20221015130511350

至此该实验shell操作结束!

三、MongDB 查询

实验内容

1.使用find或者findOne函数和查询文档

2.MongoDB 条件查询

3.MongoDB AND和OR查询

4.MongoDB $type 操作符

5.MongoDB 正则表达式

实验步骤

1.启动MongoDB shell

image-20221015131312431

2.切换到admin数据库,使用root账户

image-20221015131412422

3.插入实验数据

image-20221015132243437

4.统计集合中数据条数

image-20221015132318293

5.MongoDB中使用find来进行查询,查询就是返回一个集合中的子集,子集的范围从0到整个集

合。find的第一个参数决定了要返回哪些子集,其形式也是一个集合。

空的文档查询会匹配集合的全部内容,要是不指定查询文档,默认就是{}。

6.查询第一条数据

image-20221015132655681

注意,findOne中的O要大写

7.查询第1条以后的所有数据

image-20221015132825319

8.跳过第2条,查询后两条数据

image-20221015132938356

这条命令可用于分页,Limit是pageSize,Skip是第几页*pageSize

9.限定查询3条数据

image-20221015133127181

10.查询结果集的记录数。(查询salary小于300或大于400的个数)

image-20221015133414286

查询指定列的数据。可以通过find(或者findOne)的第二个参数来指定想要的键,这样做既会节

省传输的数据量,又能节省客户端解码文档的时间和内存消耗。

11.查询mycollection集合中,‘age’列和’salary‘列

1表示显示此列的意思,也可以用true表示

image-20221015155018086

12.按salary升序排序。(将1换成-1就是降序排序)

image-20221015155228573

13.查询username列,并去掉重复数据

image-20221015155326194

MongoDB与RDBMS中Where语句的比较:

image-20221015155403664

14.查询age小于13的数据

image-20221015155531962

15.查询age等于13的数据

image-20221015155632315

16.查询age大于15的数据

image-20221015155943311

17.查询不等于13的数据

image-20221015160111029

MongoDB AND条件

MongoDB 的find() 方法可以传入多个键(key),每个键(key)以逗号隔开。语法格式如下:

db.col.find({key1:value1,key2:value2})

18.查询age等于20,salary等于200的数据

image-20221015160414164

19.查询age小于13,salary大于等于200的数据。

image-20221015160734557

MongoDB OR条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

db.col.find({$or:[{key1:value1},{key2:value2}]}
)

20.查询salary大于300或age小于等于13的数据。

image-20221015161023486

AND和OR联合使用

21.查询salary大于等于300时,username为’banma’或者age为8的数据,类似的常规 SQL 语句

为:where salary>=300 and (username = ‘banma’ or age = 8)

image-20221015161224548

MongoDB $type 操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

image-20221015161306407

22.获取mycollection集合中username为String类型的数据。

image-20221015161423623

MongoDB 正则表达式

正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

23.查询username中包含‘m’的数据。

image-20221015161538597

24.查询以z开头的数据

image-20221015161638283

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

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

相关文章

获取Linux内核源码

在嵌入式平台上做Linux开发的时候&#xff0c;我们用的kernel都是芯片厂家移植到自家平台上的&#xff0c;但是最初的原生Linux内核的源码是从哪里来的呢&#xff1f;下面我们介绍一下怎么获取原生的Linux源码。 从Linux社区获取内核kernel源码 Linux社区的官方网站是 https:…

构造函数和析构函数(个人学习笔记黑马学习)

构造函数:主要作用在于创建对象时为对象的成员属性赋值&#xff0c;构造函数由编译器自动调用&#xff0c;无须手动调用。析构函数:主要作用在于对象销毁前系统自动调用&#xff0c;执行一些清理工作。 #include <iostream> using namespace std;//对象初始化和清理class…

音视频开发常用工具

文章目录 前言一、VLC 播放器1、简介2、下载3、VLC media player4、VLC 打开网络串流5、VLC 作为流媒体服务器①、搭建 RTSP 流媒体服务器②、新建播放器 二、MediaInfo1、简介2、下载3、MediaInfo①、主界面②、主要功能特点③、使用方法④、Mediainfo 相关参数和含义简介 三、…

Redis 哨兵(sentinel)

1. 是什么一 1.1 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 1.2 作用 俗称&#xff0c;无人值守运维 哨兵的作用&#xff1a; 1、监控redis运行状态&#xff0c;包括master和slave 2、当m…

下行抢占指示 DCI format 2_1

这部分R17和R15基本内容一样&#xff0c;只是有写细节描述略有区别&#xff0c;这里就以R17版本的协议看下downlinkPreemption&#xff0c;即DCI format 2_1有关内容。 R15支持eMBB和URLLC服务。 由于URLLC业务是优先级较高的业务&#xff0c;当无线资源不足时&#xff0c;已经…

【LeetCode-中等题】200. 岛屿数量

文章目录 题目方法一&#xff1a;深度优先搜索 dfs方法二&#xff1a;广度优先搜索 bfs方法三&#xff1a;&#xff08;重点掌握&#xff09;并查集 题目 方法一&#xff1a;深度优先搜索 dfs 思路&#xff1a;让一个扫描指针扫描每一个格子&#xff0c;然后每扫到一个为1的格…

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代&#xff0c;HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大&#xff0c;接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能&#xff0c;接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…

Qt —UDP通信QUdpSocket 简介 +案例

1. UDP通信概述 UDP是无连接、不可靠、面向数据报&#xff08;datagram&#xff09;的协议&#xff0c;可以应用于对可靠性要求不高的场合。与TCP通信不同&#xff0c;UDP通信无需预先建立持久的socket连接&#xff0c;UDP每次发送数据报都需要指定目标地址和端口。 QUdpSocket…

springboot配置ym管理各种日记(log)

1&#xff1a;yml配置mybatis_plus默认日记框架 mybatis-plus:#这个作用是扫描xml文件生效可以和mapper接口文件使用&#xff0c;#如果不加这个,就无法使用xml里面的sql语句#启动类加了MapperScan是扫描指定包下mapper接口生效&#xff0c;如果不用MapperScan可以在每一个mapp…

docker常用中间件安装

文章目录 1、前言2、中间件安装2.1、mysql2.2、gitlab容器2.3、nacos2.4、redis2.5、xxljob2.6、zipkin2.7、sentinel2.8、seata2.8.1、获取镜像2.8.2、运行容器并获取配置 2.9、rockerMQ2.9.1、rockerMQ-namesrv2.9.2、rockerMQ-broker2.9.3、rockerMQ-console 2.10、jenkins2…

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…

【进阶篇】MySQL分库分表详解

文章目录 0. 前言1. 垂直分库分表2. 水平分库分表 1. 理解过程及实现方案问题讨论衍生出分库分表策略借助成熟组件使用分库分表阶段完成后面临的问题1. 异地多活问题2. 数据迁移问题3. 分布式事务问题4. join查询的问题 分库分表的策略实现示例 2. 参考文档 0. 前言 假设有一个…

windows笔记本远程连接如何打开任务管理器?

参考素材&#xff1a; https://jingyan.baidu.com/article/8275fc86a97f5207a03cf6cd.html https://www.anyviewer.cn/how-to/ctrl-alt-delete-remote-desktop-6540.html 网上查了很多方法&#xff0c;都说ctrlaltend可以解决这个问题。 但是笔记本键盘上没有end键。 继续查了一…

【数学建模】清风数模正课5 相关性分析

相关系数 相关性分析的关键是计算相关系数&#xff0c;在本节课中将会介绍两种常用的相关系数&#xff1a;皮尔逊相关系数&#xff08;Pearson&#xff09;和斯皮尔曼相关系数&#xff08;Spearman&#xff09;。 它们可以用来衡量两个变量间相关性的大小&#xff0c;对于不同…

Android 13 - Media框架(9)- NuPlayer::Decoder

这一节我们将了解 NuPlayer::Decoder&#xff0c;学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容&#xff0c;如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单&#xff0c;越读越发现自己的无知&#xff0c;Android 源码真…

安卓 tcp 客户端

安卓 tcp 客户端 Server:8888 是Qt 写的Tcp 服务器 ip 是 192.168.2.103 port是8888 安卓手机运行 kotlin 语法的Tcp Client &#xff0c;连接&#xff0c;收发数据 效果如下图 Tcpclient package com.example.myapplicationimport android.os.Handler import android.os.Loo…

Go操作各大消息队列教程(RabbitMQ、Kafka)

Go操作各大消息队列教程 1 RabbitMQ 1.1 概念 ①基本名词 当前市面上mq的产品很多&#xff0c;比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。 Broker&#xff1a;表示消息队列服务实体Virtual Host&#x…

深入探讨梯度下降:优化机器学习的关键步骤(一)

文章目录 &#x1f340;引言&#x1f340;什么是梯度下降&#xff1f;&#x1f340;损失函数&#x1f340;梯度(gradient)&#x1f340;梯度下降的工作原理&#x1f340;梯度下降的变种&#x1f340;随机梯度下降&#xff08;SGD&#xff09;&#x1f340;批量梯度下降&#xf…

HTML5+CSS3+JS小实例:科技感满满的鼠标移动推开粒子特效

实例:科技感满满的鼠标移动推开粒子特效 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport&qu…

回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现

这周有粉丝私信想让我出一期GWO-KELM的文章&#xff0c;因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现&#xff0c;ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点&#xff0c;而KEL…