MongoDB实验——MongoDB shell操作

news2024/12/28 21:47:30

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.coloradmin.cn/o/953939.html

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

相关文章

Spark及其生态简介

一、Spark简介 Spark 是一个用来实现快速而通用的集群计算的平台&#xff0c;官网上的解释是&#xff1a;Apache Spark™是用于大规模数据处理的统一分析引擎。 Spark 适用于各种各样原先需要多种不同的分布式平台的场景&#xff0c;包括批处理、迭代算法、交互式查询、流处理…

歌尔股份半年报解读:越过山丘,前路如何?

2023年上半年&#xff0c;消费电子市场仍然表现低迷。Canalys数据显示&#xff0c;2023年第一季度同比下滑12%&#xff0c;第二季度同比下降11%&#xff0c;全球智能手机出货量连续第五个季度下滑。 这让外界议论纷纷&#xff0c;移动互联网的红利消失后&#xff0c;消费电子厂…

JDK源码-Synchronized

1. Synchronized 1.1 Synchronized定义 如果某一个资源被多个线程共享&#xff0c;为了避免因为资源抢占导致资源数据错乱&#xff0c;需要对线程进行同步&#xff0c;那么synchronized就是实现线程同步的关键字 synchronized的作用是保证在同一时刻&#xff0c; 被修饰的代…

Python Tcp编程

网络连接与通信是我们学习任何编程语言都绕不过的知识点。Python 也不例外&#xff0c;本文就介绍因特网的核心协议 TCP &#xff0c;以及如何用 Python 实现 TCP 的连接与通信。 TCP 协议 TCP协议&#xff08;Transmission Control Protocol&#xff0c; 传输控制协议&#…

Centos误删系统自带python2.7,yum报错恢复方法

使用wget分别下载python以及yum的rpm包 资源地址如下&#xff1a; http://vault.centos.org mkdir /usr/local/src/pythoncd /usr/local/src/pythonwget http://vault.centos.org/7.6.1810/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpmwget ht…

“处暑”即“出暑”?警惕秋老虎,收好这份初秋养生秘籍

“处暑”虽过&#xff0c;不过并不意味着“出暑”&#xff0c;尽管昼夜温差变大&#xff0c;但白天有时仍然很热&#xff0c;也多了换季感冒的风险。面对秋老虎的“烤”验&#xff0c;请收下这份健康养生指南&#xff0c;帮助我们安然度过夏末秋初&#xff01; 养生秘籍一&…

suricata安装与配置

一、功能介绍 1、概述 suricata来源于经典的nids系统snort&#xff0c;是一套基于网络流量的威胁检测引擎&#xff0c;整合了ids,ips&#xff0c;network security monitoring(NSM)和PCAP processing等功能。 2、IDS功能 通过监听网卡流量并匹配规则引擎进行入侵实时监测和…

Omni Recover for Mac(专业的iPhone数据恢复软件)

Omni Recover for Mac是一款专业的Mac数据恢复软件&#xff0c;能够帮助用户快速找回被误删除、格式化、病毒攻击等原因造成的文件和数据&#xff0c;包括图片、视频、音频、文档、邮件、应用程序等。同时&#xff0c;Omni Recover for Mac还具有数据备份和清理功能&#xff0c…

香橙派 Orangepi Zero2 全志H616——简介

目录 1.外设功能介绍 1.1指令集 1.2cortex 架构 1.3CPU内核 1.4芯片SOC—麒麟9000芯片 1.外设功能介绍 1.1指令集 指令是计算机运行的最小的功能单位&#xff0c;而硬件的作用是完成每条指令规定的功能。就是加、减、乘、除、指数运算、等的命令集合。就相当于造房子中砌…

java设计模式---策略模式

策略模式的定义 策略设计模式是一种行为设计模式。当在处理一个业务时&#xff0c;有多种处理方式&#xff0c;并且需要再运行时决定使哪一种具体实现时&#xff0c;就会使用策略模式。 策略模式的类图&#xff1a; 策略模式的实现 在支付业务中&#xff0c;有三种付款方式&…

从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr

目录 1. 智能指针的引入_内存泄漏 1.1 内存泄漏 1.2 如何避免内存泄漏 2. RAII思想 2.1 RAII解决异常安全问题 2.2 智能指针原理 3. auto_ptr 3.1 auto_ptr模拟代码 4. unique_ptr 4.1 unique_ptr模拟代码 5. shared_ptr 5.1 shared_ptr模拟代码 5.2 循环引用 6.…

大数据学习:Hive安装部署

Hive的安装部署 注意hive就是一个构建数据仓库的工具&#xff0c;只需要在一台服务器上安装就可以了&#xff0c;不需要在多台服务器上安装。 此处以安装到node03为例&#xff1b;请大家保持统一 使用hadoop普通用户操作 1.1 先决条件 搭建好三节点Hadoop集群&#xff1b;node…

十六、策略模式

一、什么是策略模式 策略&#xff08;Strategy&#xff09;模式的定义&#xff1a;该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式&#xff0c;它通过对算法…

Python+turtle实现一个乌龟逃跑小游戏(可以和孩子一起完成)

直接上演示视频 这个代码也是之前当老师的时候&#xff0c;给孩子们写的一个小游戏&#xff0c;那么我们一起看一下这个小游戏是如何让完成的 1、首先完成代码的前期准备 1、这里我们t turtle.Pen() # 海龟—表示我们操作的小海龟 2、enemy turtle.Pen() # 敌龟—表示追击我…

计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究&#xff0c;让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程&#xff0c;我们可以将其比喻为人脑对视觉信息的处理过程。就像…

(数学) 剑指 Offer 39. 数组中出现次数超过一半的数字 ——【Leetcode每日一题】

❓ 剑指 Offer 39. 数组中出现次数超过一半的数字 难度&#xff1a;简单 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输…

echarts图表静态数据 象形柱形图、折线图、日历饼图、饼状图四种实现

标题 页面全部代码 <template><div class"data-serve"><div class"side"><div class"side-inner"><router-link class"side-btn" to"/camer/pushInfo"><i class"el-icon-picture&q…

学习ros机器人导航从精读nav2导航launch文件开始

nav2导航launch文件经过了多层套娃&#xff0c;真的是让初学者哭晕在厕所&#xff0c;今天我们就拆解一下他的launch文件&#xff0c;还原他最简单的状态&#xff0c;看看他到底启动了什么节点。 一 tb3仿真机器人启动文件&#xff1a;tb3_simulation_launch.py 1 文件目录结…

一文了解什么是同源策略

同源策略是一种重要的安全机制&#xff0c;它限制一个源加载的文档或脚本如何与另一个源的资源进行交互。下文小文智能就为您详细解答什么是同源策略。 一、目的 它有助于隔离潜在的恶意文档&#xff0c;减少可能的攻击媒介。例如&#xff0c;它可以防止互联网上的恶意网站在…

C++ 手写实现类似lower_bound和upper_bound的二分功能

目录 lower_bound和upper_bound介绍手动实现类似的二分效果lower_boundupper_bound另一种常见的二分形式 对lower_bound函数使用lamda函数 lower_bound和upper_bound介绍 lower_bound函数的作用是查找范围内第一个大于等于目标元素的元素迭代器/指针 数组的简单使用&#xff…