欢迎大家来到IT世界,在知识的湖畔探索吧!
数据处理是计算机的主要作用之一,为了便于进行数据处理,于是出现了数据库。
早期常见的数据库有dBASE、foxbase、foxpro、paradox等,它们都是单机版的数据库。
后来出现了中大型数据库,应用最广的有SQL Server、Sybase、Informix、DB2、Oracle,它们是服务器形式的数据库。
随着互联网的兴起,开源的数据库MySQL越来越流行,几乎成为了Web开发的标配。
现在,MongoDB开始走入我们的视野,并且在越来越多的场合开始取代MySQL。
今天,我们从概念出发,认识一下MongoDB。
1、经典的数据库概念
DB:数据库,是Database的缩写,是组织、存储和管理数据的仓库。
DBMS:是Database Management System的缩写,即数据库管理系统的缩写,是对数据库进行管理和操作的软件。
RDBMS:是Relational Database Management System的缩写,即关系型数据库管理系统的缩写,用于对关系型数据库进行管理。关系型数据库基于关系模型建立,包括数据表的基本结构、基本操作和完整性约束。
SQL:是Structured Query Language的缩写,即结构化查询语言的缩写,是数据库提供的标准接口,供用户访问和处理数据库中的数据。
CURD:是Create、Update、Retrieve、Delete四个单词的缩写,表示对数据库的增加、修改、读取、删除操作,也就是我们常说的数据库的增删改查。
SQL的Create命令:用于创建数据库和数据表;
SQL的Drop命令:用于删除数据库和数据表;
SQL的Alter命令:用于修改数据库表的结构定义;
SQL的Select命令:用于查询数据表的内容;
SQL的Delete命令:用于从数据表中删除内容;
SQL的Update命令:用于更新数据表中的内容。
2、MongoDB的相关概念
NoSQL:是Not Only SQL的缩写,如果我们用中文直译,就是“不仅仅是SQL”,用于泛指非关系型数据库。
JSON:是JavaScript Object Notation的缩写,即JavaScript对象表示法的缩写。JSON是数据存储和交换的格式,JSON数据结构由键值对组成。JSON的作用和XML类似,但是比XML更轻量级,解析更快。
MongoDB:是一种基于分布式文件存储的数据库,为快速开发互联网Web应用而设计。MongoDB是NoSQL数据库,但是和关系型数据库比较像,可以认为是介于关系型数据库和非关系型数据库之间的数据库类型。
传统的关系型数据库,每条数据保存为数据库表的一行。MongoDB采用基于文档的数据模型,每条数据保存为一个文档,MongoDB文档类似于JSON对象。
MongoDB有如下的主要概念:
(1)database:数据库,和SQL中的数据库类似;
(2)collection:集合,和SQL中的表类似;
(3)document:文档,和SQL中表的记录行类似;
(4)field:字段,和SQL中表的列类似;
(5)index:索引,和SQL中的索引类似;
(6)primary key:主键,和SQL中的主键类似,MongoDB将_id字段设置为主键。
3、MongoDB的安装
我使用的操作系统是64位的Ubuntu Server,下面是该操作系统下MongoDB的安装过程:
(1)以root用户登录Ubuntu Server,然后执行apt update命令,更新操作系统的安装列表:
(2)执行apt upgrade命令,升级本地软件库:
命令输入后,可能执行的时间会比较久一点,这是执行过程中的一些截图:
(3)执行apt install mongodb命令,安装MongoDB:
MongoDB的安装比较快,下面是截图:
(4)安装完成后,可以使用service mongodb status命令,查看MongoDB的状态:
4、MongoDB数据库的操作
(1)使用mongo命令,即可进入MongoDB的命令行环境:
(2)MongoDB命令行环境下,使用db命令,可以显示当前连接的数据库:
(3)MongoDB命令行环境下,使用show dbs命令,可以显示所有的数据库:
(4)MongoDB命令行环境下,使用“use <数据库名>”命令,并且<数据库名>已经存在,则会切换当前数据库到<数据库名>对应的数据库:
例如,输入use config命令,然后执行db命令,发现当前数据库已经被切换到config:
(5)MongoDB命令行环境下,使用“use <数据库名>”命令,并且<数据库名>不存在,则会创建名称为<数据库名>的数据库,并且切换当前数据库到新建的数据库:
例如,输入use db_ocean命令,然后执行db命令,发现当前数据库已经被切换到db_ocean:
(6)MongoDB命令行环境下,使用db.dropDatabase()方法,将会删除当前的数据库:
5、MongoDB集合的操作:
(1)MongoDB命令行环境下,使用db.createCollection()方法创建集合。
db.createCollection()方法至少包含一个参数:集合名,除了集合名,还可以包含是否为固定大小,以及如果为固定大小时要指定的最大字节数和最大文档数。
下面先创建db_rivers数据库,然后在db_rivers数据库中建立col_changjiang集合:
> use db_rivers switched to db db_rivers > db db_rivers > db.createCollection("col_changjiang") { "ok" : 1 }
欢迎大家来到IT世界,在知识的湖畔探索吧!
(2)MongoDB命令行环境下,使用db.集合名.drop()方法删除集合。
下面的操作,删除前面建立的col_changjiang集合:
欢迎大家来到IT世界,在知识的湖畔探索吧!> use db_rivers switched to db db_rivers > db.col_changjiang.drop() true
(3)MongoDB命令行环境下,使用show collections命令,显示当前数据库中的所有集合:
下面的操作,先创建db_school数据库,然后在库中创建col_students、col_teachers、col_buildings三个集合,最后显示数据库中的所有集合:
> use db_school switched to db db_school > db.createCollection("col_students") { "ok" : 1 } > db.createCollection("col_teachers") { "ok" : 1 } > db.createCollection("col_buildings") { "ok" : 1 } > show collections col_buildings col_students col_teachers
6、MongoDB文档的操作
(1)MongoDB命令行环境下,使用db.集合名.insert()方法插入文档
下面的操作,在col_students集合中插入一个文档,文档包含了如下的信息:
姓名:zhangsan
性别:male
年龄:32
欢迎大家来到IT世界,在知识的湖畔探索吧!> db.col_students.insert({name:"zhangsan", gender:"male", age:32}) WriteResult({ "nInserted" : 1 })
(2)MongoDB命令行环境下,使用db.集合名.find()方法查询文档
下面的操作,先在col_students集合中插入几个文档,然后查询
> db.col_students.insert({name:"zhangsan", gender:"male", age:32}) WriteResult({ "nInserted" : 1 }) > db.col_students.insert({name:"lisa", gender:"female", age:35}) WriteResult({ "nInserted" : 1 }) > db.col_students.insert({name:"wangwu", gender:"male", age:29, from:"hunan"}) WriteResult({ "nInserted" : 1 }) > db.col_students.find() { "_id" : ObjectId("5f70550e716bf1d32052ed11"), "name" : "zhangsan", "gender" : "male", "age" : 32 } { "_id" : ObjectId("5f705b06716bf1d32052ed12"), "name" : "lisa", "gender" : "female", "age" : 35 } { "_id" : ObjectId("5f705b44716bf1d32052ed13"), "name" : "wangwu", "gender" : "male", "age" : 29, "from" : "hunan" }
(3)MongoDB命令行环境下,使用db.集合名.find().pretty()方法查询文档,文档可以按照递进的格式显示:
下面的操作,优雅地显示col_students集合中的所有文档:
> db.col_students.find().pretty() { "_id" : ObjectId("5f70550e716bf1d32052ed11"), "name" : "zhangsan", "gender" : "male", "age" : 32 } { "_id" : ObjectId("5f705b06716bf1d32052ed12"), "name" : "lisa", "gender" : "female", "age" : 35 } { "_id" : ObjectId("5f705b44716bf1d32052ed13"), "name" : "wangwu", "gender" : "male", "age" : 29, "from" : "hunan" }
(4)MongoDB命令行环境下,使用db.集合名.update()方法更新文档,update()方法第一个参数为查询要更新的文档,第二个参数为更新的值,还可以提供第三个参数,表示是否更新多个文档。
下面的操作,更新col_students集合中所有姓名为zhangsan的文档,将找到的文档的年龄设置为22:
> db.col_students.update({"name":"zhangsan"}, {$set:{"age":22}}, {multi:true}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.col_students.find().pretty() { "_id" : ObjectId("5f70550e716bf1d32052ed11"), "name" : "zhangsan", "gender" : "male", "age" : 22 } { "_id" : ObjectId("5f705b06716bf1d32052ed12"), "name" : "lisa", "gender" : "female", "age" : 35 } { "_id" : ObjectId("5f705b44716bf1d32052ed13"), "name" : "wangwu", "gender" : "male", "age" : 29, "from" : "hunan" }
(5)MongoDB命令行环境下,使用db.集合名.remove()方法删除文档,remove()方法第一个参数为查询要删除的文档,如果没有参数,表示删除所有的文档:
下面的操作,删除col_students集合中所有性别为male的文档:
> db.col_students.remove({"gender":"male"}) WriteResult({ "nRemoved" : 2 }) > db.col_students.find().pretty() { "_id" : ObjectId("5f705b06716bf1d32052ed12"), "name" : "lisa", "gender" : "female", "age" : 35 }
到现在为止,通过这一篇短文,就将MongoDB的知识点简单介绍了一遍,是不是感觉MongoDB比MySQL还简单?我个人的感觉是,MongoDB比MySQL简单,但是能力却更为强大。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/89560.html