• Nodejs之路(四)—— MongoDB&MySQL


    一、MongoDB

    1.1概述

    1. MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    2. 关系型数据库和非关系型数据库

      • 关系型数据库:表与表之间存在关系

        • 所有的关系型数据可以都需要通过sql语言来操作

        • 所有的关系型数据库在操作之前都需要设计表结构

        • 所有关系型数据库支持约束:

          • 唯一的

          • 主键

          • 默认值

          • 非空

      • 非关系型数据库

        • 有的非关系型数据库就是key-value对儿,没有表

        • MongoDB是长得最像关系型数据库的非关系型数据库

          • 数据库->数据库

          • 数据表->集合(数组)

          • 表记录->文档对象

        • MongoDB不需要设计表结构,也就是说可以任意往里面存储数据,没有结构性这么一说

    3. MongoDB数据库的基本概念

      • 数据库——mongodb下可以有多个数据库

      • 集合——一个数据库可以有多个集合(相当于MySQL中的表)

      • 文档——一个集合可以有多个文档(相当于MySQL中的表记录)

    4. MongoDB的存储结构:
      {
          //数据库    
          qq:{   
              //集合
              users:[
                  //文档
                  {name:"张三",age:15},
                  {name:"李四",age:16},
                  {name:"王麻子",age:17},
                  {name:"刘老五",age:18},
                  {name:"赵老六",age:19}
                  ......
              ],
              products:[
                  
              ]
              ......
          },
          taobao:{
              
          },
          baidu:{
              
          }
          ......
      }

                 注意:

      • 文档结构很灵活,没有任何限制
      • MongoDB非常灵活,不需要像MySQL一样先创建数据库、表、设计表结构。当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了。一切都由MongoDB来帮你自动完成建库建集合这件事儿 

    1.2安装

    64位下载地址:https://www.mongodb.com/download-center/community

    注意:

    • 记得要配置环境变量

    • 输入  mongod --version 测试是否安装成功

    1.3启动和关闭mongodb 数据库

    • 启动:

      mongod --dbpath = 数据存储目录路径

      注意:

      • MongoDB将数据目录存储在 db 目录下,但是这个数据目录不会主动创建。我们第一次启动mongodb时,需要手动在根目录下创建datadb这个目录。这里要注意,数据目录应该放在根目录下(如:C:或者 D: 等, 比如我的是放在C:datadb下)

      • 第一次启动mongodb时,执行命令:mongod --dbpath "C:datadb",后面再启动mongodb时,直接执行命令:mongod即可

      • mongod --dbpath 命令是创建数据库文件的存放位置,第一次启动mongodb服务时需要先确定数据库文件存放的位置,否则系统不会自动创建,启动会不成功。

    • 停止:
      在开启服务的控制台,直接Ctrl+C即可停止
      或者直接关闭开启服务的控制台也可以   

    1.4连接和退出mongodb数据库

    连接:

    #该命令默认连接本机的 MongoDB 服务
    mongo

    退出:

    #在连接状态输入 exit 退出连接
    exit

    1.5基本命令

    • show dbs:查看显示所欲数据库

    • db:查看当前操作的数据库

    • use 数据库名称:切换到指定的数据库(如果没有会新建)

    • 如下:

      

    1.6在Node中如何操作MongoDB数据库

    1.6.1使用官方的MongoDB包来操作

    下载地址:https://github.com/mongodb/node-mongodb-native

    1.6.2使用第三方mongoose来操作MongoDB数据库

    第三方包mongoose:基于MongoDB官方的mongodb包再一次做了封装

    官网:https://mongoosejs.com/

    官方指南:https://mongoosejs.com/docs/guides.html

    官方API文档:https://mongoosejs.com/docs/api.html

    1. 起步

      • 安装:

        npm i mongoose
      • 实例demo:

        // 官方参考模板
        const mongoose = require('mongoose');
        
        // 连接 MongoDB数据库
        mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});
        
        // 创建一个模型,就是在设计数据库
        // MongoDB是动态的,非常灵活,只需要在代码中设计数据库就可以了
        // mongoose这个包就可以让你的设计编写过程变得非常的简单
        const Cat = mongoose.model('Cat', { name: String });//虽然这里的Cat是大写,但是会生成小写的 cats 集合名称
        
        //实例化一个Cat
        const kitty = new Cat({ name: 'Zildjian' });
        
        // 持久化保存 Kitty 实例
        kitty.save().then(() => console.log('meow'));
    2. 官方指南

      • 设计 Schema 发布 Model

        var mongoose = require('mongoose')
        
        var Schema = mongoose.Schema
        
        
        // 1.连接数据库
        // 指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
        mongoose.connect('mongodb://localhost/test')
        
        // 2.设计集合结构(表结构)
        // 字段名称就是表结构中的属性名称
        // 约束的目的是为了保证数据的完整性,不要有脏数据
        var userSchema = new Schema({
            username:{
                type:String,
                required:true //表示username必须要有
            },
            password:{
                type:String,
                required:true
            },
            email:{
                type:String
            }
        
          });
        
        //3.将集合结构发布为模型
        // mongoose.model 方法就是用来将一个架构发布为一个 model
        // 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称
        //          mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称。例如这里的 User 最终会变成 users 集合名称
        // 第二个参数:架构 Schema
        // 返回值:模型构造函数
        var User = mongoose.model('User', userSchema)
        
        // 4.当有了模型构造函数之后,就可以使用这个构造函数对 users 集合中的数据为所欲为了(增删改查)
      • 增加数据

        var admin = new User({
            username:"admin",
            password:"123456",
            email:"admin@admin.com"
        })
        
        admin.save(function(err,ret){
            if(err){
                console.log("保存失败")
            }else{
                console.log("保存成功")
                console.log(ret)
            }
        })
      • 查询

        • 查询所有

          User.find(function(err,ret){
              if(err){
                  console.log("查询失败")
              }else{
                  console.log(ret)
              }
          })
        • 按条件查询所有

          User.find({
              username:"zs"  //这就是条件
          },function(err,ret){
              if(err){
                  console.log("查询失败")
              }else{
                  console.log(ret)
              }
          })
        • 按条件查询单个

          User.findOne({
              username:"zs"  //这就是条件
          },function(err,ret){
              if(err){
                  console.log("查询失败")
              }else{
                  console.log(ret)
              }
          })
      • 删除数据

        • 删除所有符合条件的数据

          User.remove({
              username:"zs"
          },function(err,ret){
              if(err){
                  console.log("删除失败")
              }else{
                  console.log("删除成功")
                  console.log(ret)
              }
          })
        • 删除符合条件的第一条数据

          User.deleteOne({ 
              username:"admin"
          }, function (err) {
              if (err){
                  return handleError(err)
              }
              // deleted at most one User document
          })

          User.findOneAndRemove(conditions,[options],[callback])
        • 根据id删除一条数据

          User.findByIdAndRemove(id,[options],[callback])
      • 更新数据

        • 根据条件更新所有

          User.update(conditions,doc,[options],[callback])
        • 根据指定条件跟新一个

          User.findOneAndUpdate([conditions],[update],[options],[callback])
        • 根据id更新一个

          User.findByIdAndUpdate('5d32fa6bac0b39270c256225',{
              password:"123"
          },function(err,ret){
              if(err){
                  console.log("更新失败")
              }else{
                  console.log("更新成功")
              }
          })

    二、MySQL

    1.官方参考

    https://www.npmjs.com/package/mysql

    2.安装

    npm install mysql

    3.参考demo

    var mysql      = require('mysql');
    
    // 1.创建连接
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '123',
      database : 'students'
    });
     
    // 2.连接数据库
    connection.connect();
     
    // 3.执行数据操作
    connection.query('SELECT * FROM `users`', function (error, results, fields) {
      if (error) throw error;
      console.log('The solution is: ', results);
    });
    
    // ---------所有的增删改查都在query方法里面操作--------------------------------------
    // -------------增加数据-------------------------
    // connection.query('INSERT INTO users VALUES(null,"admin","123456")', function (error, results, fields) {
    //       if (error) throw error;
    //       console.log('The solution is: ', results);
    //     });
    
    // 4.关闭连接
    connection.end();

    注意:

    • 要提前安装好MySQL,并且打开MySQL服务
    • 对于MySQL,创建连接的数据库的表和字段需要提前设置好
  • 相关阅读:
    [UE4]利用取模运算达到循环遍历数组的目的
    RESTful登录设计(基于Spring及Redis的Token鉴权)
    Nginx/LVS/HAProxy负载均衡软件的优缺点详解
    业务中使用分布式的场景
    mycat系列-Mycat 分片规则
    MyCat
    mysql 分区说明
    mysql 表分区 查看表分区 修改表分区
    MySql 分区 分库 分表
    tomcat7部署多个web应用不同编码,端口
  • 原文地址:https://www.cnblogs.com/FHC1994/p/11228032.html
Copyright © 2020-2023  润新知