• 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());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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(
    			,
    			{
    				justOne:,
    				writeConcern:
    			}
    		)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参数说明:

    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})
    
    • 1

    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}
            ]
        }
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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

  • 相关阅读:
    计算机网络_2.1 物理层概述
    Nginx在前后端分离项目中的配置
    对FD描述符(包括inode以及三张表)的一点理解
    做哪些副业可以日赚一百?对程序员来说简直不要太容易!
    【Docker】Dockerfile构建镜像
    算法补天系列之有序表的四种实现方式——AVL树,SB树,红黑树,跳表(重点)介绍说明
    机器学习实操的七个步骤
    MySQL高级9-锁
    WindowsServer域控的安装与卸载
    一文读懂如何将 Rancher 下游集群升级到 Kubernetes v1.25
  • 原文地址:https://blog.csdn.net/weixin_57367513/article/details/132582056