mongodb

数据库的概念

在计算机出现之前,那个时候,都是通过纸质文件来保存数据。这种方式肯定有缺点:

  • 容易丢失和损坏
  • 占用空间大,浪费资源(纸张,树,破坏环境,全球变暖,人类灭绝。。。)
  • 查找数据困难

后来,出现了计算机,人们选择使用计算机来保存数据。最常见的是 word 和 excel。

  • 查询不便
  • 如果是很大的文件,打开都非常费力,非常容易丢失数据或者损坏

为了解决上述的问题,数据库出现。顾名思义,就是存储数据的仓库。

数据库,英文名叫做 database,简称 db,是按照数据结构组织,存储和管理数据的仓库。

  • 数据是结构化
  • 数据可以实现共享
  • 数据独立性高
  • 可以统一的管理和控制

数据库的分类,现在基本上可以分为两大类:关系型数据库非关系型数据库

所谓关系型数据库,数据存储在一张又一张的表里面。表格与表格之间有相应关系。

非关系型数据库,例如 mongodb,以类似于 js 对象的形式(JSON)来存储数据。

非关系型数据库相比关系型数据库,扩展性更好。

数据库系统包含的东西。

一个数据库系统可以包含硬件和软件。软件里面又分为3个部分:

  • 数据库
  • 数据库管理系统
  • 数据库可视化应用程序

常见的一些数据库系统:

Oracle 数据库

这个是甲骨文公司开发的,在数据库领域一直处于领先地位,功能最多,最全,但是非常的贵,每年的数据库维护费用都是上千万。

SQL Server 数据库

由微软开发的数据库系统,广泛应用于电商、银行等行业,该数据库好用,但是有个特点,必须是 windows 操作系统。

MySQL 数据库

由瑞典的一家叫做 MySQLAB 公司开发的数据库系统,最大特点,功能小巧好用,而且免费。而且2009年,被 Oracle 收购。

以上所介绍的数据库,都是关系型数据库。

mongodb 数据库

由10ten公司开发的非关系型数据库,这个数据库被誉为最像关系型数据库的非关系型数据库。

首先,要使用 mongodb,第一步是安装。

mongodb 常用的命令

数据库相关操作

查看数据库

show dbs

创建(切换)数据库

如果有这个数据库,就是切换,如果没有就是,创建

use 数据库名

通过 db 命令可以查看当前所使用的数据库

关闭数据库

windows 系统非常简单,直接关闭mongod的那个终端窗口就可以。

如果是 mac 系统,不能直接关,否则下一次在开的时候会提示端口被占用。

use admin;
db.shutdownServer();

删除数据库

db.dropDatabase();

集合相关操作

所谓集合,就类似于关系型数据库中的表。

创建集合

db.createCollection(name,options)

查看集合

show tables
show collections

删除集合

db.集合名.drop();

文档的基本操作

所谓文档,就是具体的每一条数据

插入文档

db.集合名.insert({})

例如:

> db.stu.insert({"name":"yaoyao","age":17})
WriteResult({ "nInserted" : 1 })

在mongo 3.2 版本之后,增加 insertOne 和 insertMany(数组)

> db.stu.insertMany([{"name":"tangkechao","age":17},{"name":"qingqing","age":18}])
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5f68049137421653b9c344e1"),
		ObjectId("5f68049137421653b9c344e2")
	]
}

查看集合里面的文档

db.集合名.find()

例如:

> db.stu.find()
{ "_id" : ObjectId("5f68041337421653b9c344e0"), "name" : "yaoyao", "age" : 17 }
{ "_id" : ObjectId("5f68049137421653b9c344e1"), "name" : "tangkechao", "age" : 17 }
{ "_id" : ObjectId("5f68049137421653b9c344e2"), "name" : "qingqing", "age" : 18 }

更新文档

db.集合名.update(<query>,<update>)

例如:

db.stu.update({"name":"yaoyao"},{$set:{"age":18}})

删除文档

db.集合名.deleteOne();
db.集合名.deleteMany();

例如:

> db.stu.deleteOne({"name":"yaoyao"})
{ "acknowledged" : true, "deletedCount" : 1 }

文档的查询

基本查询

db.集合名.find(query)

例如:

> db.stu.find()
{ "_id" : ObjectId("5f68049137421653b9c344e1"), "name" : "tangkechao", "age" : 17 }
{ "_id" : ObjectId("5f68049137421653b9c344e2"), "name" : "qingqing", "age" : 18 }

后面可以链式调用pretty 方法,可以将查询结果格式化

> db.stu.find().pretty()
{
	"_id" : ObjectId("5f68049137421653b9c344e1"),
	"name" : "tangkechao",
	"age" : 17
}
{
	"_id" : ObjectId("5f68049137421653b9c344e2"),
	"name" : "qingqing",
	"age" : 18
}
条件查询

Mongo 的条件查询和关系型数据库很像,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sM6RZKB-1612237068694)(/Users/Jie/Library/Application Support/typora-user-images/image-20200921103108220.png)]

来看一个具体的示例:

> db.students.find({"age":{$gt:100}}).pretty()
AND 条件

AND 用于有多个条件时,进行查询。

例如,分数大于60分并且是女生

> db.students.find({"age":{$gt:20},"gender":"女"});

OR条件

和 AND 刚好相反,表示满足其中一条就可以。

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

具体示例如下:

db.students.find({$or:[{"age":{$gt:20}},{"gender":"男"}]})

查询结果的排序

在mongo里面,可以使用 sort 方法来进行排序。可以使用 1 或者 -1 来指定。

1 升序,-1 降序

db.集合名.find().sort()

具体示例如下:

db.students.find().sort({age:1}).pretty();

当我们在排序的时候,会遇到需要指定多个字段,如下:

db.students.find().sort({age:1,"gender":-1}).pretty();

查询结果进行限制

在 mongo里面,可以对查询结果进行一个限制,使用 mongo的limit 方法,里面传入要限制的条数。

db.集合名.find().limit(条数)

具体的示例如下:

> db.students.find().limit(5)

跳过多少条

使用 skip 方法可以跳过多少条数据,这个方法一般和 limit 连用

db.集合名.find().limit(条数).skip(条数)

示例如下:

db.students.find().limit(5).skip(5)

模糊查询

在mongo里面模糊查询很简单,使用正则就OK了。

具体示例如下:

db.students.find({"name":/^李/})

数据库的备份和恢复

在 mongodb 里面,如果要备份数据库,可以使用 mongodump 这个命令

语法如下:

mongodump -h dbhost -d dbname -o dbpath
  • dbhost:数据库的服务器地址
  • dbname:数据库名字
  • dbpath:备份的数据库要放在哪个地方

具体示例如下:

mongodump -h localhost:27017 -d f67 -o /Users/Jie/Desktop

数据库的恢复

所谓数据库的恢复,就是指将备份的数据库进行还原。

语法:

mongorestore -h dbhost -d dbname --dir dbpath
  • -h:数据库服务器所在地址
  • -d:需要恢复的数据库叫什么名字
  • –dir:备份的数据库的目录的位置

具体示例如下:

mongorestore -h localhost:27017 -d f69 --dir /Users/Jie/Desktop/f67



#### 数据库的备份和恢复



在 mongodb 里面,如果要备份数据库,可以使用 mongodump 这个命令



语法如下:



```js
mongodump -h dbhost -d dbname -o dbpath
  • dbhost:数据库的服务器地址
  • dbname:数据库名字
  • dbpath:备份的数据库要放在哪个地方

具体示例如下:

mongodump -h localhost:27017 -d f67 -o /Users/Jie/Desktop

数据库的恢复

所谓数据库的恢复,就是指将备份的数据库进行还原。

语法:

mongorestore -h dbhost -d dbname --dir dbpath
  • -h:数据库服务器所在地址
  • -d:需要恢复的数据库叫什么名字
  • –dir:备份的数据库的目录的位置

具体示例如下:

mongorestore -h localhost:27017 -d f69 --dir /Users/Jie/Desktop/f67