Mongodb入门--头歌实验MongoDB 数据库基本操作

一、数据库创建

任务描述

本关任务:创建数据库。

相关知识

本关评测是在 Linux 环境下进行的,MongoDB 的安装与配置测评系统均已默认完成。

为了完成本关任务,你需要掌握: 1.如何连接数据库; 2.如何创建数据库。

连接数据库

MongoDB 安装完成后,可以通过 pgrep mongo -l 命令来查看是否已经启动。如图1所示:

图1


                                                           图 1

在操作数据库之前,需要连接它,连接本地数据库服务器,输入命令:mongo,预期输出如图2和图3所示:

图2


                                                        图 2

 

图3


                                                        图 3

mongo -u mongo -p 13 --authenticationDatabase admin

其中连接的警告可以不用管,只要最下方出现“ > ”符号,就说明连接成功。

创建数据库

连接上 MongoDB 之后就可以进行数据库的操作了,接下来我们创建一个名为 Testdb 的数据库,用命令:use Testdb 语句来创建(如果数据库不存在,则创建数据库,否则切换到指定数据库),如图4所示:

图4


                                                                图 4

查看所有数据库我们可以通过 show dbs 命令来查看,如图5所示:

图5


                                                                图 5

        

然而并没有我们刚创建的 Testdb 数据库。要想显示它,我们需要向数据库插入一些数据:db.Testdb.insert({_id:1,name:"王小明"}),如图6所示

图6


                                                        图 6

现在,就可以看到我们创建的数据库 Testdb 了。

删除数据库

MongoDB 删除数据库需要先切换到该数据库中:

use Testdb

然后再执行删除命令:

db.dropDatabase()

> use mydb
switched to db mydb
> db.mydb.insert({_id:1,name:"李小红"})
WriteResult({ "nInserted" : 1 })

 二、创建集合

任务描述

本关任务:在数据库中创建一个集合。

相关知识

MongoDB 数据库中的集合相当于 MySQL 数据库中的表。

为了完成本关任务,你需要掌握: 1.如何在指定的数据库创建集合; 2.查看集合; 3.删除集合。

在指定的数据库创建集合

先进入指定数据库 Testdb :use Testdb; 在 Testdb 数据库中创建创建固定集合 test ,整个集合空间大小512000KB,文档最大个数为1000个。

db.createCollection("test", { capped : true, autoIndexId : true, size : 512000, max : 1000 } )
  • capped :是一个布尔类型,true 时创建固定集合,必须指定 size。固定集合指有固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。默认为 false;

  • autoIndexId :也是一个布尔类型,如为 true,自动在_id 字段创建索引。默认为 false 

  • size :为固定集合指定一个最大值(以字节 KB 计);

  • max :指定固定集合中包含文档的最大数量。

不过,和 MySQL 不同的是,在 MongoDB 中,你不一定需要先创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

创建集合命令(推荐)db.集合名.insert()(注意:一条数据用大括号“ {} ”括起来,多条数据用“ [] ”将所有数据括起来)。

db.mytest2.insert([{"name" : "王小明","sex":"男"},{"name" : "李小红","sex":"女"}])
默认 id

MongoDB 中存储的文档 必须 有一个_id键(如果我们插入数据的时候未指定_id,系统会自动生成一个默认的 id )。这个键的值可以是任何类型的,默认是个 ObjectId 对象。在一个集合里面,每个文档都有唯一的_id值,来确保集合里面每个文档都能被唯一标识。如果有两个集合的话,两个集合可以都有一个值为123的_id键,但是每个集合里面只能有一个_id是123的文档

查询集合

查询集合命令db.集合名.find()。由此我们也能看到 MongoDB 默认创建的_id,如图1所示;

图1


                                                        图 1

删除集合

删除集合命令db.集合名.drop(),如图2所示;

图2


                                                                图 2

mongo                #进入MongoDB
> use Testdb2
switched to db Testdb2
> db.t_stu.insert([{"_id" : 1,"name" : "小明","sex" : "男","hobbies" : ["乒乓球","羽毛球"]},{"_id" : 2,"name" : "小红","sex" : "女","hobbies" : [ "画画","唱歌"]}])
BulkWriteResult({"writeErrors" : [{"index" : 0,"code" : 11000,"errmsg" : "E11000 duplicate key error collection: Testdb2.t_stu index: _id_ dup key: { : 1.0 }","op" : {"_id" : 1,"name" : "小明","sex" : "男","hobbies" : ["乒乓球","羽毛球"]}}],"writeConcernErrors" : [ ],"nInserted" : 0,"nUpserted" : 0,"nMatched" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ]
})
> db.t_stu.find()
{ "_id" : 1, "name" : "小明", "sex" : "男", "hobbies" : [ "乒乓球", "羽毛球" ] }
{ "_id" : 2, "name" : "小红", "sex" : "女", "hobbies" : [ "画画", "唱歌" ] }

三、文档操作一

任务描述

本关任务:文档数据在 MongoDB 中的插入和更新。

相关知识

本章节中我们将向大家介绍文档数据在 MongoDB 中的基本操作。

文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式。BSON 是一种类 JSON 的一种二进制形式的存储格式,简称: Binary JSON 。

为了完成本关任务,你需要掌握: 1.插入文档命令; 2.更新文档的两种方法。

插入文档

插入文档命令db.集合名.insert(文档)。 该命令前面两关我们也有用到。除了前两关的用法以外,我们还可以将数据定义为一个变量,如下所示:

document=({_id:1,name: '王小明',sex: '男',hobbies: ['乒乓球','羽毛球'],birthday: '1996-02-14'
});

然后执行插入操作:

db.person.insert(document)

person 是集合名,如果该集合不在该数据库中,MongoDB 会自动创建该集合并插入文档,查看 person 集合,如图1所示:

图1


                                                        图 1

更新文档

更新文档主要会用到 update() 方法和 save() 方法。

update() 方法

我们先把 document 插入到集合 person2;

db.person2.insert(document)

由于信息有误,上面 birthday 的格式错了,该怎么去修改这个字段的值呢?这时就要用到 update() 方法了。

用 update() 方法来更新 person2 的数据,把王小明的出生日期替换成1996,命令如下:

db.person2.update({birthday:"1996-02-14"},{$set:{birthday:"1996"}})

更新后如图2所示( pretty() 方法的作用是使文档整齐的输出):

图2


                                        图 2

 

可以发现:

  • update() 有两个参数,都是对象,中间用逗号“ ,”间隔;
  • 第一个参数表示需要修改的值;
  • 第二个参数用 $set 操作符指向更新后的值。
save() 方法

save() 方法通过传入的文档替换已有文档

我们先把 document 插入到集合 person3 中;

db.person3.insert(document)

如果这时我们把一个人的数据都弄错了,怎么办呢?这时用 save() 方法来更新修改一下 person3 的数据就比较方便。

用 save() 方法把王小明的数据修改为李小红的数据:

db.person3.save({"_id" :1,"name" : "李小红","sex" : "女","hobbies" : ["画画","唱歌","跳舞"],"birthday" : "1996-06-14"
})

注:如果 save() 法也指定_id,则对文档进行更新未指定_id则会执行插入功能,MongoDB 默认自动生成一个不重复的_id

总结:

  • update() 方法仅适用于修改某条数据中的某个键值;

  • save() 方法适用于修改整条数据。

> use Testdb3
switched to db Testdb3
> document=({"_id" : 1,"name" : "张小华","sex" : "男","phone" : '12356986594',"hobbies" : [ "打篮球","踢足球","唱歌" ]})
{"_id" : 1,"name" : "张小华","sex" : "男","phone" : "12356986594","hobbies" : ["打篮球","踢足球","唱歌"]
}
> db.stu1.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu2.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu3.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu2.update({"phone" : '12356986594'},{$set:{"phone" : '18356971462'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.stu3.save({"_id" : 1,"name" : "张晓晓","sex" : "女","phone" : '12365498704',"hobbies" : [ "跳舞","羽毛球","唱歌" ]})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

四、 文档操作二

任务描述

本关任务:文档数据在 MongoDB 中的查询和删除。

相关知识

为了完成本关任务,你需要掌握:

  1. 查询文档命令;
  2. 删除文档命令。
查询文档

我们先插入文档到集合 stu1

document=([{name:'张小华',sex:'男',age:20,phone:'12356986594',hobbies:['打篮球','踢足球','唱歌']
},{name:'李小红',sex:'女',age:18,phone:'12355487536',hobbies:['跳舞','唱歌']
}])
db.stu1.insert(document)

然后查看 stu1 ,命令和结果如图1所示(因为我们没有设置_id,所以 MongoDB 会默认生成):

图1


                                                图 1

 

上述显示的文档格式不够整齐,我们可以使用 pretty() 方法,使输出更整齐,如图2所示:

图2


                                        图 2

条件查询
操作格式范例关系数据库中类似的语句
等于{<key>:<value>}db.stu1.find({"name":"李小红"}).pretty()where name = '李小红'
小于{<key>:{$lt:<value>}}db.stu1.find({"age":{$lt:18}}).pretty()where age < 18
小于或等于{<key>:{$lte:<value>}}db.stu1.find({"age":{$lte:18}}).pretty()where age <= 18
大于{<key>:{$gt:<value>}}db.stu1.find({"age":{$gt:18}}).pretty()where age > 18
大于或等于{<key>:{$gte:<value>}}db.stu1.find({"age":{$gte:18}}).pretty()where age >= 18
不等于{<key>:{$ne:<value>}}db.stu1.find({"age":{$ne:18}}).pretty()where age != 18

现在我们来查找一下 age 大于18岁的数据,命令和效果如图3所示:

图3


                                                图 3

AND 条件

find() 方法可以传入多个键 (key),每个键 (key) 以逗号隔开,即常规 SQL 的 AND 条件。如查询集合 stu1 中年龄为20岁的男性信息:

db.stu1.find({"age":20, "sex":"男"}).pretty()

查询结果如图4所示:

图4


                                                        图 4

删除文档数据

删除指定的数据:

db.stu1.remove({'age':20}) //删除年龄为20的数据

查看该集合的内容,如果只剩下如图5所示的信息,说明数据删除成功:

图5


                                                图 5

删除全部数据(集合并不会删除):
db.remove({})

查看该集合的内容,如果如图6所示,无显示或者显示为空,说明数据全部删除:

图6

#########begin#########
echo "document=([{_id:1,name:'西西',sex:'女',age:23,national:'汉族'},{_id:2,name:'东东',sex:'男',age:20,national:'苗族'},{_id:3,name:'北北',sex:'男',age:19,national:'汉族'},{_id:4,name:'南南',sex:'女',age:15,national:'傣族'}]);
db.stu1.insert(document);
db.stu2.insert(document);
db.stu1.find({'age':{\$gte:15},'sex':'女'});
db.stu1.find({'national':'苗族'});
db.stu1.find({'age':{\$lt:20},'sex':'男'});
db.stu2.remove({});"
#########end#########

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

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

相关文章

sqlmap(四)案例

一、注入DB2 http://124.70.71.251:49431/new_list.php?id1 这是墨者学院里的靶机&#xff0c;地址&#xff1a;https://www.mozhe.cn/ 1.1 测试数据库类型 python sqlmap.py -u "http://124.70.71.251:49431/new_list.php?id1" 1.2 测试用户权限类型 查询选…

Vue3 ts环境下的PropType

简介 在Typscript中&#xff0c;我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景&#xff1a; 我们通过request请求从服务端获取了一条数据&#xff0c;数据是个Array的格式&#xff0c;Array中的每个元素又是一个对象&#xff0c;像下…

Web前端—属性描述符

属性描述符 假设有一个对象obj var obj {a:1 }观察这个对象&#xff0c;我们如何来描述属性a&#xff1a; 值为1可以重写可以遍历 我们可以通过Object.getOwnPropertyDescriptor得到它的属性描述符 var desc Object.getOwnPropertyDescriptor(obj, a); console.log(desc);我…

Python-VBA函数之旅-bytearray函数

目录 1、bytearray函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 bytearray函数在Python中提供了一种可变字节序列的表示方式&#xff0c;这在实际编程中有多种应用场景。常见的应用场…

RabbitMQ3.13.x之九_Docker中安装RabbitMQ

RabbitMQ3.13.x之_Docker中安装RabbitMQ 文章目录 RabbitMQ3.13.x之_Docker中安装RabbitMQ1. 官网2. 安装1 .拉取镜像2. 运行容器 3. 访问 1. 官网 rabbitmq - Official Image | Docker Hub 2. 安装 1 .拉取镜像 docker pull rabbitmq:3.13.0-management2. 运行容器 # lates…

蓝桥杯-数组分割

问题描述 小蓝有一个长度为 N 的数组 A 「Ao,A1,…,A~-1]。现在小蓝想要从 A 对应的数组下标所构成的集合I 0,1,2,… N-1 中找出一个子集 民1&#xff0c;那么 民」在I中的补集为Rz。记S∑reR 4&#xff0c;S2∑rERA,&#xff0c;我们要求S、和 S,均为偶数&#xff0c;请问在这…

Spring6-单元测试:JUnit

1. 概念 在进行单元测试时&#xff0c;特别是针对使用了Spring框架的应用程序&#xff0c;我们通常需要与Spring容器交互以获取被测试对象及其依赖。传统做法是在每个测试方法中手动创建Spring容器并从中获取所需的Bean。以下面的两行常见代码为例&#xff1a; ApplicationCo…

【教程】混淆Dart 代码

什么是代码混淆&#xff1f; 代码混淆是一种将应用程序二进制文件转换为功能上等价&#xff0c;但人类难于阅读和理解的行为。在编译 Dart 代码时&#xff0c;混淆会隐藏函数和类的名称&#xff0c;并用其他符号替代每个符号&#xff0c;从而使攻击者难以进行逆向工程。 Flut…

基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“垃圾分类网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统功能界面图 用户登录、用户注…

SpirngBoot开发常用知识

springboot开发常用知识 命令行打包SpringBoot打包插件window端口命令临时属性设置热部署启动热部署热部署范围 常用计量单位数据校验加载测试的专用属性Web环境模拟测试如何发送虚拟请求业务层测试回滚随机产生测试用例内置数据源 命令行打包 对SpringBoot项目进行打包命令行…

适用于 Windows 10 的 10 大免费数据恢复软件

数据丢失可能是一场噩梦&#xff0c;尤其是在涉及重要文件和文档时。无论是由于意外删除、系统崩溃还是病毒攻击&#xff0c;找到适合 Windows 10 的文件夹恢复软件都可以在恢复丢失的数据方面发挥重要作用。在本指南中&#xff0c;我们将探索适用于 Windows 10 用户的 10 大免…

[STL-list]介绍、与vector的对比、模拟实现的迭代器问题

一、list使用介绍 list的底层是带头双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。与其他的序列式容器相比(array&#xff0c;vector&#xff0c;deque)&#xff0c;list通常在任意位置进行…

[Apple Vision Pro]开源项目 Beautiful Things App Template

1. 技术框架概述&#xff1a; - Beautiful Things App Template是一个为visionOS设计的免费开源软件&#xff08;FOSS&#xff09;&#xff0c;用于展示3D模型画廊。 2. 定位&#xff1a; - 该模板作为Beautiful Things网站的延伸&#xff0c;旨在为Apple Vision Pro用户…

CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?

CNAS认可是中国合格评定国家认可委员会的英文缩写&#xff0c;由国家认证认可监督管理委员会批准设立并授权的国家认可机构&#xff0c;统一负责对认证机构、实验室和检验机构等相关机构的认可工作。 在软件测试行业&#xff0c;CNAS认可具有重要意义。它标志着一个软件测试公…

C# 如何修改项目名称

目录 背景具体步骤1、Visual Studio中修改项目名和程序集名称以及命名空间2、修改项目文件夹名3、修改解决方案里项目的路径4、再次打开解决方案&#xff0c;问题解决步骤总结 名词解释解决方案&#xff08;Solution&#xff09;项目&#xff08;Project&#xff09;程序集&…

浏览器工作原理与实践--虚拟DOM:虚拟DOM和实际的DOM有何不同

虚拟DOM是最近非常火的技术&#xff0c;两大著名前端框架React和Vue都使用了虚拟DOM&#xff0c;所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了&#xff0c;React和Vue框架本身所蕴含的知识点非常多&#xff0c;而且也不是我们专栏的重点&#xff0c…

JavaWeb前端基础(HTML CSS JavaScript)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. HTML 1.1 HTML基础 结构 头<head>身体<body> 内容 图片<img>段落<p>图标<link> 标签 单标签双标签 常用标签 div&#xff1a;分割块span&#xff1a;只占需要的大小p&…

sqlserver问题记录

今天在利用sql查询数据时出现如下错误 在执行批处理时出现错误。错误消息为: 引发类型为“System.OutOfMemoryException”的异常。 症状 使用 SSMS 运行返回大量数据的 SQL 查询时&#xff0c;会收到类似于以下内容的错误消息&#xff1a; 执行批处理时出错。 错误消息为&…

nginx工作原理解析

目录 1、master-workers 的工作机制介绍 2、master-workers 的机制的好处 3、设置多少个 worker 4、最大连接数和支持的最大并发数的计算 1、master-workers 的工作机制介绍 nginx在启动后&#xff0c;会有一个master进程和一个或者多个相互独立的worker进程 过来的请求由…

C++模仿qq界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口的大小this->resize(645,497);//设置窗口名字this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:\\zhouzhouMyfile\\qt_proj…