NodeJs06
数据库 databases
--------------------------------------------
1.1 数据库的作用
# 存储数据
1.2 数据库的分类
1.2.1 结构型数据库也叫关系型数据库
MySQL、SQL Server、Oracle、Access等等
采用SQL语言,管理数据库
结构型数据库的特点
# 数据库里面有表,表有行和列的概念,每个表中,都有明确的字段,每行记录,都有这些字段。不能有的行有,有的行没有。
1.2.2 非结构型数据库
mongodb
非结构型数据库的特点
# 没有行、列的概念。用JSON来存储数据
# 集合就相当于“表”,文档就相当于“行”
# 文档就是json 可以通过javascript进行操作
为什么不用txt文档或者excell来存储数据
# 当数据比较大的时候,对文档的读取是一次性读取,内存不够,而数据库读取是分段读取的
# 增删改查不方便
结构型数据库和非结构型数据库的不同点
结构型数据库存储数据不灵活,一个字段,需要是同样类型的数据。不能一行记录字符串,一行记录是数字。
非结构型数据库的特点:
# 数据模型比较简单
# 对数据库性能要求较高
# 不需要高度的数据一致性
----------------------------
mongodb 安装
1. 下载 https://www.mongodb.com/download-center#community
安装过程中可以对安装路径进行更改,建议不更改
# 数据库的运行文件的位置和数据库存储的位置不是一回事
2. 安装成功后添加环境变量
eg:将mongo的bin目录 C:\Program Files\MongoDB\Server\3.0\bin 加入到系统的path环境变量中
为什么要添加环境变量
# 可以在不同的目录下执行mongodb的相关应用操作
3. 环境变量添加成功后,可以在系统的任何盘符,使用mongo的命令了
4. 常用命令操作
mongod 开启数据库
mongo 操作数据库
mongoimport 导入数据库
5. 开启数据库
在32位操作系统中 执行以下操作
mongod --dbpath C:\data --storageEngine=mmapv1
在64位系统中
mongod --dbpath C:\data
注意:
# 如果光标挂起,说明数据库开启成功
# --dbpath就是选择数据库文档所在的文件夹
# --storageEngine=mmapv1 指定存储格式,64位不需要指定
# 在mongoDB中,有物理文件对应一个个数据库,U盘可以拷走 以ns结尾的文件即为数据库。
6. 操作数据库 执行mongo 命令
# 一定要确保在操作数据库之前数据库已经开启了,不能关,不能ctrl+c。 一旦这个cmd有问题了,数据库就自动关闭了。
######################
以上操作步骤,可以创建n个不同目录下的数据库存储的地方,每次开始数据库都要执行以上操作,比较麻烦,为了简化操作,可以让mongodb成为电脑的服务,那么采用开始mongodb服务每次都能快速启动数据库,并且进入到指定的数据库存储的地方 注意以管理员的方式进行安装
32位操作系统:
mongod --dbpath "D:\Data\db" --logpath "D:\Data\log\log.txt" --serviceName "MongoDb" --serviceDisplayName "mongodb" --journal --storageEngine=mmapv1 --install
64位:
mongod --dbpath "C:\data\db" --logpath "C:\data\log\log.txt" --serviceName MongoDB --install
# --serviceName 服务名称 建议MongoDB
# --serviceDisplayName window组件的显示名称 可以跟服务名称不一致
# 移除服务 将install改为remove即可
2.然后启动 必须在管理员的权限下启动
net start MongoDB 启动mongodb
net stop MongoDB 关闭mongodb
##############################
7. 操作数据库的相关指令 以下操作是mongodb的语法
7.1 show dbs
# 列出所有的数据库
7.2 use 数据库名字
# 使用某个数据库
# 如果use一个不存在的,就是新建一个数据库
7.3 db
# 查看当前所在数据库
7.4 db.students.insert({"name":"laowang","age":100});
# 向当前数据库所在的集合中插入一条数据
# db 表示当前所在的数据库
# students 代表是一个集合,一个数据库里面可以有很多个集合
# students第一次使用,集合将自动创建,集合中存储的每一条json数据叫做文档
7.5 show collections
显示当前数据中的集合
7.6 db.students.find()
查看当前集合中的所有文档
7.7 db.dropDatabase()
删除当前所在的数据库
7.8 db.studetns.drop()
删除数据库中的指定集合
7.9 db.studetns.count()
查看当前集合中有多少条数据
8. 插入数据
插入一条文档
eg:db.student.insert({"name":"xiaoming"});
插入多条文档
eg: db.student.insert([{"name":"laowang"},{"name":"laozhang"}]);
# 我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,然后导入数据库:
mongoimport --db test --collection restaurants --drop --file primer-dataset.json
--db test 想往哪个数据库里面导入
--collection restaurants 想往哪个集合中导入
--drop 把集合清空
--file primer-dataset.json 哪个文件
9. 查找数据
查找数据,用find。find中没有参数,那么将列出这个集合的所有文档:
db.restaurants.find()
精确匹配:
db.student.find({"score.shuxue":70});
多个条件:
db.student.find({"score.shuxue":70 , "age":12})
大于条件:
db.student.find({"score.yuwen":{$gt:50}});
或者。寻找所有年龄是9岁,或者11岁的学生
db.student.find({$or:[{"age":9},{"age":11}]});
查找完毕之后,打点调用sort,表示升降排序。
db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )
10. 修改数据
查找名字叫做小明的,把年龄更改为16岁:
db.student.update({"name":"小明"},{$set:{"age":16}});
查找数学成绩是70,把年龄更改为33岁:
db.student.update({"score.shuxue":70},{$set:{"age":33}});
更改所有匹配项目:
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});
完整替换,不出现$set关键字了:
db.student.update({"name":"小明"},{"name":"大明","age":16});
10. 删除数据
只要匹配成功,就会删除
db.restaurants.remove( { "borough": "Manhattan" } )
删除一条
db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )