2020年已经过去好几周了,由于疫情的原因,在家办公已经两周了,才调整好心情认真学习,希望疫情能早日过去。
想要留下的代码
- 数组去重
pins = Array.from(new Set(pins)); // 去重复
- 文件上传
// 检查上传文件格式
beforeUpload(file) {
let isExcel = false
if (file.type) {
isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel';
} else { // 兼容windows没有file.type的情况
if (file.name.endsWith('.xlsx') || file.name.endsWith('.xls')) {
isExcel = true
}
}
if (!isExcel) {
this.$message.error('只能上传.xlsx或.xls文件')
}
return isExcel;
},
async uploads({file}) {
const formData = new FormData()
formData.append('file', file)
let result = await uploadPins(formData)
this.pins = result.data
},
学到的新知识
周末看视频学习了一下数据库的知识,收获不少,笔记如下:
第一章
1-1 导读
- Nosql数据库设计。
- MongoDb安装配置,GUI工具。
- Nodejs中的Mongoose库。
1-2 Nosql数据库&设计原则
- Nosql学习的意义
- 易扩展,高性能,高可用
- 较容易映射复杂数据(key-value)
- 无事物特性要求(ACID-原子性,一致性,隔离性,持久性)
- 数据库相关概念
- 关系型数据库:关系模型
- Nosql数据库 非关系型
- Nosql设计原则
- 常见场景及设计方法(内嵌,父/子引用,反范式)
- 内嵌是指存在关联关系的文档,放在同一文档中,以数组的形式存放
{
"name": "test",
"role": ["admin","role"],
"address": ["address1","address2"]
}
以上的 role和adress就是内嵌,要上放在关系型数据库中,role会单独建张表
内嵌设计减少了关联查询,适用于单类需要描述的属性,不经常变化的属性。像一个人学习的课程这种动态变化的,可扩展的就不适合内嵌
2. 父引用:指存在一对多的情况中,放在同一文档中,以数组的形式存放
{
"tid": "postID",
"title": "文章标题",
"comments": ["commentID1","commentID2"]
}
以上的commens存放评论ID,可更加ID查到相应评论
3. 子引用:指存在一对非常多的情况中,由于数据库文档存放的限制,这个时候进行反引用
{
"tid": "postID",
"cid": "commentID",
"content": "恢复内容"
}
以上的commens存放评论ID,可更加ID查到相应评论
4. 父子引用设计
1)引用数据是否非常多
2)引用数据量是否非常庞大,而且在增加
3)数据是否需要单独访问
5. 反范式:范式是指按照既定的用法,范式就像是一种公认的模型或模式,反范式就是-不走寻常路
{
"tid": "postID",
"title": "文章标题",
"users": [{
"uid": "用户ID",
"name": "test",
"role": ["admin","role"],
"address": ["address1","address2"]
}]
}
反范式设计,是否有提升性能的空间,数据量的变化是否非常庞大,庞大到更新会异常低效,先考虑读写比,才考虑反范式。
2)双向关联的场景及设计原则
1-3 MongoDB简介&安装
-
www.mongodb.com/ 官网简介,以及安装
-
数据库介绍
-
本地doker安装mongodb
1) https://hub.docker.com/ docker网站搜索mongo 进入 https://hub.docker.com/_/mongo,拷贝里面的配置文件
2) cd /Users/wangcui/my 目录下创建 mongotest文件夹,
cd mongotest
vi docker-compose.yml (创建docker-compose的配置文件,内容使用mongo.yml,注意里面的格式,引号)
docker-compose up -d
docker ps | grep mongotest (查看进程,也可查看创建出的mogodb数据库名称 mongotest_mongo_1)
第二章:MongoDB 应用与实战
2-1 Mongodb初始化配置
知识是没有边界的,先学会使用,解决现实问题,再深入学习
- www.mongodb.com/ 官网简介中的文档,server -> Security 中关于创建用户以及角色 Authentication Role-Based
- 在mongotest 目录下执行 docker exec -it mongotest_mongo_1 mongo (连接到数据库 mongotest_mongo_1 为上一步查看到的文件名)
- 接下来就可以操作数据库啦
show dbs // 这时没有结果,因为还没登录
use admin
db.auth('root','example') // 这里是配置文件里配置的用户名和密码 ,如果出现的结果是1 就表示已经登录成功了
show dbs // 可以看的目前有哪些数据库
use testdb // 创建数据库
db.createUser({user: "wangcui",pwd: '123456', roles:[{ role: 'dbOwner', db: 'testdb'}]}) // 创建用户,包括密码,角色
use testdb
db.auth('wangcui', '123456') // 即可用刚刚创建的账号名密码登录
db.users.insertOne({name: 'test',age: 30, email: 'test@qq.com'}) //插入数据,若报错 too many users are authenticated 就退出当前命令行,重新进入,就可以了
db.users.find({}) // 查找插入的数据
db.users.updateOne({name: 'test'},{$set:{ email: 'test1@qq.com'}}) // 更新数据
db.users.deleteOne({name: 'test'}) // 删除数据
2-2 GUI工具 Robo 3T
1. https://robomongo.org/ //robo官网下载
2. create 一个新连接 修改connection和authentication的内容
3. connection填入名称随便起一个,以及数据库的地址和端口,本地就填localhost,端口在配置文件有
4. authentication填入要连接的数据库和账号密码
5. 连接后就跟其他数据库的GUI工具操作差不多
2-3 Mongodb 备份和恢复
1. 在 mongotest 目录下执行
2. docker exec -it mongotest_mongo_1 mongodump -h localhost -u root -p example -o /temp/test // 将文件备份到了容器里的/temp/test目录下,还需要将它拷贝出来
3. docker cp cb2bd5f7bfcb:/temp/test temp 就将容器内部的数据拷贝到了mongotest/temp 目录下,其中cb2bd5f7bfcb是使用docker ps | grep mongotest查出来id
4. docker exec -it mongotest_mongo_1 mongorestore -h localhost -u root -p example --dir /temp/test/ 数据恢复
2-4 Mongoose
1. https://mongoosejs.com/ 官网
2. 新建文件夹 mongoose-demo npm init -y npm i -S mongoose 然后新建app.js文件,添加内容,然后执行 node app.js 结果就出来了
2-5 mongoose实战配置&curd操作
1. 将mododb的相关操作放到配置文件