MongoDB基础入门
此视频为学习 尚硅谷MongoDB基础入门的学习记录
导航
目录
一、数据库
-
什么是数据库?
- 存储数据的仓库
-
为什么要有数据库?
- 首先数据是存储在内存里运行的,如果一断电的话,数据就会丢失,所以可以将数据存储到硬盘,但是硬盘没有联网,所以有了可以联网也可以存储数据的数据库。
-
数据库能做什么?
- 数据库可以存储数据,并且这些数据还可以连接网络,也就是和硬盘相比,可以不用将数据库到处带,就像是网盘。
-
数据库的服务器和客户端
- 服务器:保存数据的
- 客户端:操作和存储数据的(CRUD)
-
数据库的分类
-
按照关系型分类:
-
关系型数据库(MySQL、Orcal等)
-
非关系型数据库(MongoDB)
-
关系型和非关系型的区别:
总而言之就是:关系型的是创建表格, 非关系型是可以创建任意多个文档。 -
1、数据存储方式不同。 关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。 2、扩展方式不同。 SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。 因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。 而非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。 3、对事务性的支持不同。 如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
-
-
-
二、MongoDB常见命令
-
安装MongoDB
- 可以去参考我写的博客 MongoDB的安装
-
MongoDB的常见命令
- 打开服务器:
net start MongoDB
- 关闭服务器:
net stop MongoDB
- 打开客户端:
mongo
,在cmd窗口便可以连接上数据库
- 打开服务器:
-
MongoDB的数据库分类
- 数据库(database):用来存储集合的,而且数据库也有分大小。
- 集合(collection):集合类似于数组,用于存放文档的
- 文档(document): 文档是MongoDB数据库中最小的单位,我们要操作的目标就是文档。
- MongoDB关系: 数据库(database) > 集合(collection)> 文档(document)
- 值得注意的是: 在MongoDB中不需要自己创建数据库和集合,便可以直接创建文档,其实就是在创建文档的同时,会将数据库和集合创建了。
-
操作MongoDB数据库
-
在使用之前可以安装一个编辑器(nosql manager for mongodb),下载免费版便可,可以不用在cmd界面操作。
-
最基础的代码:
use ppxia
:进入数据库ppxiashow dbs
:显示数据库show collections
:显示当前数据库有什么集合db
:查看是在哪个数据库
-
对MongoDB数据库的CRUD操作
-
增加
-
db.集合名.insert(document)
:表示增加一个或多个文档db.piyou.insert({name: "孙悟空", age: 28, address:"花果山"}); /* 表示向 集合名为piyou插入了文档, 文档内容是对象。 集合名是自己创建的,想用什么名称就用什么。 */ db.piyou.insert([ {name:"猪八戒", age: 38, address:"高老庄"}, {name: "沙和尚", age: 45, address:"流沙河"} ]); /* 可以注意到: 传递的数据是数组,数组内部是对象, 其实对象就相当于文档,这就是插入了两个文档。 */
-
db.集合名.insertOne(document.[callback])
:表示插入一个文档,回调函数callback是可选的-
db.piyou.insertOne({name:"唐僧", age: 18, address: "女儿国"}); /* 表示向集合名为piyou的 插入了一个文档。 */
-
-
db.集合名.insertMany(document, [callback])
:表示插入多个文档-
db.piyou.insertMany([ {name:"白骨精", age:20,address:"白骨洞"}, {name:"蜘蛛精", age: 24, address:"蜘蛛洞"} ]); /* 可以看到,用法是和insert是相差不多的。数组里面有对象,对象即是文档。 */
-
-
-
查找
-
db.集合名.find(condition);
:查询一个或多个文档 -
db.集合名。findOne(condition);
:查询一个文档 -
db.集合名.findMany(condition)
:查询多个文档 -
查询案例:
-
db.piyou.find({});
{ "_id" : ObjectId("654e3d779da167acf1219f50"), "name" : "孙悟空", "age" : NumberInt(28), "address" : "花果山" } { "_id" : ObjectId("654e3e0c9da167acf1219f51"), "name" : "猪八戒", "age" : NumberInt(38), "address" : "高老庄" } { "_id" : ObjectId("654e3e0c9da167acf1219f52"), "name" : "沙和尚", "age" : NumberInt(45), "address" : "流沙河" } { "_id" : ObjectId("654e3e529da167acf1219f53"), "name" : "唐僧", "age" : NumberInt(18), "address" : "女儿国" } { "_id" : ObjectId("654e3e829da167acf1219f54"), "name" : "白骨精", "age" : NumberInt(20), "address" : "白骨洞" } { "_id" : ObjectId("654e3e829da167acf1219f55"), "name" : "蜘蛛精", "age" : NumberInt(24), "address" : "蜘蛛洞" }
-
db.piyou.find({age:18}) //这条语句表示的是查询age是18的文档。 值得注意的是,条件也是写在了对象里面, //也是因为传入的值需要是json语句
-
-
db.集合名.find(condition).count;
:使用count()来计数db.piyou.find().count(); // 执行结果是: 6, 因为在插入那边是一共插入了6条数据
- 总结:find()返回的是数组,数组内存放着文档,findOne()返回的就是一个文档,
findMany()返回的也是数组内存放着文档的形式。find()的返回值还可以调用count(),
用来获取符合条件的数量
-
-