前言
为什么要学习数据库?
1.岗位技能需求
2.现在的世界,得数据者得天下
3.存储数据的方法
4.程序,网站中大量数据如何长久保存
数据管理的发展阶段?
(1)人工管理阶段
1.容易丢失数据
2.数据重复
3.难以查阅和使用
4.维护成本高
(2)文件系统阶段
1.容易储存
2.处理速度快
3.数据形式丰富
(3)数据库系统阶段
1.易与维护海量数据
2.更快的运算预处理
3.保证数据的安全
4.使用编程语言管理数据
数据库分类?
关系型数据库(SQL)
非关系型数据库(NOSQL)
关系型与非关系型?
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
非关系型数据库提出另一种理念,例如,以键-值对存储,且结构不固定,每一条记录可以有不一样的字段,记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段.
MongoDB概念
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统,是非关系型的数据库(NoSQL),数据之间无关联。
NoSQL是什么?
NoSQL(Not Only SQL),意即“不仅仅是SQL”,指不适用SQL语句的数据库。是非关系型数据存储的广义定义,通常以key-value形式存储数据,没有表结构。
NoSQL产生背景?为什么会出现NoSQL?
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
- 大数据时代对数据仓库的要求
- 高并发读写需求
- 海量数据的高效率读写
- 高扩展性和可用性
NoSQL的优缺点
-
优点:
a.易扩展(去掉关系数据库之间的数据关系,数据之间无关系,在架构层面也带了扩展能力)
b.快速的读写(sql语句不用解析,功能相对单一)
c.成本低廉(开源的软件)
d.架构灵活,没有复杂的关系(表与表之间不存在关系) -
缺点:
a.没有统一的标准.
b.没有正式的官方支持.
c.支持的特性不够丰富,现有产品所提供的功能比较有限 不能像Mysql SQl Server和oricale一样,提供各种附加功能.
MongoDB VS mysql
MongoDB应用领域
博客文章-评论系统、记录日志、缓存、即时通信聊天记录等
MongoDB的存储方式
mongodb是将数据存储到硬盘上.
mongodb内部支持的js解释器,我们可以在mongodb中直接写js代码.
mongodb存数据的时候是key->value形式:(js中的key-value就是对象{key:value})
mongodb中分为数据库,集合(相当于mysql中的表),文档(相当于mysql的记录)
MongoDB 组成
传统的关系型数据库一般是由数据库(database)、表(tables)、记录(record)三个层次的概念组成,Mongodb则是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。
Mongodb中的集合相当于关系型数据库中的表,但是没有没有表与表之间的关系,以及列和行的概念,这体现了其模式自由的特点.。
集合:即一组文档,多个文档存放在一起即变成集合,类似于mysql中的表。
数据库:多个集合组合在一起即变成数据库。
MongoDB操作
连接方法之一:可以在MongDB的安装路径下的Bin文件夹中打开cmd。
语法:mongo ip地址:端口号(mongodb的默认端口号为27017)/数据库名
(默认连接test)
或者直接输入mongo
,简单连接:
一、数据库的查看、切换、删除
show dbs
查看数据库
use [db名称]
增加/切换数据库
db.dropDatabase()//注意大写
删除数据库
二、数据集合的创建、查看、删除
show collections
查看数据库当中的集合
db.[collection名称].insert({json数据})
创建collection并添加数据
db.createCollection([collection名称])
只创建集合
db.[collection名称].drop()
删除集合
三、MongoDB文档管理—添加数据
1、db.COLLECTION_NAME.insert({"key":"val",`````})
插入数据语句
注意:插入记录成功之后,mongodb会默认为每一个文档都添加一个 _id 的字段,并且同一集合中的_id是唯一的,该字段可以是任意数据类型,默认的为objectId 。
2、db.COLLECTION_NAME.save(document)
插入数据
save和insert有什么区别呢?
insert: 若新增数据的主键已经存在,则会抛异常提示主键重复,不保存当前数据。
save:若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
3、db.COLLECTION_NAME.insert([document1,document2,document3])
批量插入数据语句
四、MongoDB文档管理—查询
(一)常用查询
db.[collection名称].find()
查询集合中所有的记录
db.[collection名称].find().pretty()
格式化查询,数据的展示更加美观
db.[collection名称].find({"key":value})
按条件查询
(二)条件运算符查询
用于比较两个表达式并从mongoDB集合中获取数据:db.[collection名称].find({ key: {$gt : 100}})
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
(!=) 不等于 - $ne:
(三)And查询
find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件:
db.col.find({key1:value1, key2:value2})
例如:查询姓名叫haha ,年龄14岁的人
(四)or 查询
使用了关键字 $or:
db.col.find({$or:[{key1:value1},{key2:value2}] }).pretty()
(五)按照首字母排序查询
db.[集合名称].find().sort({KEY:1})
key:要排序的字段,正序 1;倒序 -1
(五)limit 查询限定的数据量
使用MongoDB的limit()方法,接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER)
例如:只要两条相关数据,语法是 limit(2)
(六)skip() 跳过记录
使用skip()方法来跳过指定数量的数据,skip()方法同样接受一个数字参数,作为跳过的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
例:跳过3条数据,显示2条
(七)count() 查询文档的数量
db.COLLECTION_NAME.find().count()
返回集合中某条件查询下文档的数量。
db.COLLECTION_NAME.count()
返回集合中全部文档的数量。
五、MongoDB文档管理—修改
db.collection.update(
{<query>},
{$set:{<update>}},
{
upsert: <boolean>,
multi: <boolean>
}
)
- query:查询出要修改的数据
- update:要修改的数据的值
- upsert:可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
- multi: 可选,MongoDB 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
六、MongoDB文档管理-删除
db.collection.remove(
<query>,
{
justOne: <boolean>
}
)
- query:(可选) 删除的文档的条件
- justOne:(可选) 如果设为 true 或 1,则只删除一个文档
Mongodb 可视化工具 Robo3T
robo3T是mongodb可视化工具,用更简单的方式连接数据库,管理数据库。能够将数据库文件放到软件上修改,结合图形化的处理方式,将MongoDB数据库中的文件转换为分布式的存储方式,提高数据文件编辑和保存效率。
Mongoose 与 Node 操纵 Mongodb数据库
一、Mongoose简介
Mongoose是nodeJS提供的快速操作MongoDB的一个库,是一个便捷操作MongoDB的对象模型工具(Mongoose的操作以对象为单位)。
二、Mongoose 操作 MongoDB
(一)驱动下载
cnpm install --save mongoose
(二)连接MongoDB
//引用模块
var mongoose=require("mongoose");
//连接数据库,使用解析器解析本次连接
mongoose.connect("mongodb://localhost:27017/连接的(库)",{ useNewUrlParser: true,useUnifiedTopology:true })
var db=mongoose.connection;//设置数据库链接对象
// 监听成功或失败
db.on("err",console.error.bind(console,"aaa"));
db.on("open",()=>{
console.log("链接成功")
})
(三)schema对象及相关操作
1、创建schema对象:mongoose操作数据库都是通过schema对象,用于定义文档构成(类似创建数据库表字段,方便添加内容)
2、将Schema对象转换成数据模型:
注意:mongoose会默认给我们的集合名末尾加个s,或者我们手动加个s 。
3、设置插入内容:var demoUser = new colUser({key:"val"})
4、使用save()进行插入:
(四)find()进行查询操作
1、查询全部:
2、查询指定内容
3、使用条件查询:$lt(小于) $lte(小于等于) $gt(大于) $gte(大于等于) $ne(不等于)
4、$or 或查询
5、查询指定列。除了_id 以外的内容,写1即显示已查询,写0即不显示。
6、limit()显示多少条,skip()跳过多少条
(五)改 update()
(六)删除
1、删除指定数据,在 remove()中传入条件
2、删除全部数据
Mongoose 操作 MongoDB完整的小栗子:https://blog.csdn.net/weixin_43297321/article/details/107820703
三、创建MongoClient 对象操作MongoDB
使用 Node.js 来连接 MongoDB,通过创建一个 MongoClient 对象。
安装驱动:$ cnpm install mongodb