前端周总结3- mongodb学习总结

184 阅读1分钟

2020年已经过去好几周了,由于疫情的原因,在家办公已经两周了,才调整好心情认真学习,希望疫情能早日过去。

想要留下的代码

  1. 数组去重 pins = Array.from(new Set(pins)); // 去重复
  2. 文件上传
// 检查上传文件格式
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数据库&设计原则

  1. Nosql学习的意义
  • 易扩展,高性能,高可用
  • 较容易映射复杂数据(key-value)
  • 无事物特性要求(ACID-原子性,一致性,隔离性,持久性)
  1. 数据库相关概念
  • 关系型数据库:关系模型
  • Nosql数据库 非关系型
  1. Nosql设计原则
  • 常见场景及设计方法(内嵌,父/子引用,反范式)
    1. 内嵌是指存在关联关系的文档,放在同一文档中,以数组的形式存放
    {
       "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简介&安装

  1. www.mongodb.com/ 官网简介,以及安装

  2. 数据库介绍

  3. 本地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初始化配置

知识是没有边界的,先学会使用,解决现实问题,再深入学习

  1. www.mongodb.com/ 官网简介中的文档,server -> Security 中关于创建用户以及角色 Authentication Role-Based
  2. 在mongotest 目录下执行 docker exec -it mongotest_mongo_1 mongo (连接到数据库 mongotest_mongo_1 为上一步查看到的文件名)
  3. 接下来就可以操作数据库啦
  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的相关操作放到配置文件