一、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:},
    {name:"李四",age:},
    {name:"王麻子",age:},
    {name:"刘老五",age:},
    {name:"赵老六",age:}
    ......
    ],
    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时,需要手动在根目录下创建data\db这个目录。这里要注意,数据目录应该放在根目录下(如:C:\或者 D:\ 等, 比如我的是放在C:\data\db下)

    • 第一次启动mongodb时,执行命令:mongod --dbpath "C:\data\db",后面再启动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,创建连接的数据库的表和字段需要提前设置好

Nodejs之路(四)—— MongoDB&MySQL的更多相关文章

  1. python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点

    python 闯关之路四(下)(并发编程与数据库编程)   并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型   操作系统工作原理介绍.线程.进程演化史.特点.区别 ...

  2. TODO:MongoDB MySQL数据库备份

    TODO:MongoDB MySQL数据库备份 1. MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodu ...

  3. 我的VSTO之路(四):深入介绍Word开发

    原文:我的VSTO之路(四):深入介绍Word开发 在上一篇文章中,我介绍了Word的对象模型和一些基本开发技巧.为了更好的介绍Word插件开发,我为本文制作了一个Word书签的增强版,具体功能是让用 ...

  4. 第四章 MySQL高级查询(二)

    第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...

  5. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  6. 第四章 MySQL数据类型和运算符

    5.1 MySQL数据类型介绍 一.数据类型简介 (1) 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容 (2) 不同的数据类型也决定了 My ...

  7. redis mongodb mysql 三大数据库的更简单的批量操作。批量任务自动聚合器。

    1.redis mongodb mysql的python包都提供了批量插入操作,但需要自己在外部对一个例如1000 001个任务进行分解成每1000个为1个小批次,还要处理整除批次数量后的余数,如果做 ...

  8. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  9. nodejs之路-[0]安装及简易配置

    题外话: 之前写过ubuntu下编译nodejs- 传送门:Ubuntu15.04编译安装nodejsV0.12.3 只是如今基本在win下做开发了-. 就以这篇帖子为开头,作为我踏上nodejs之路 ...

  10. nodejs取参四种方法req.body,req.params,req.param,req.body

    摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...

随机推荐

  1. 约数个数求和+线性筛约数——bzoj3994

    这题首先要会线性筛约数个数,并求出前缀和 bool vis[maxn]; int mm,mu[maxn],prime[maxn],num[maxn],sum[maxn],d[maxn],sum1[ma ...

  2. SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件,本文主要介绍SecureCRT的使用方法和技巧

    SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件,本文主要介绍SecureCRT的使用方法和技巧 VanDyke CRT 和 VanDyk ...

  3. SPSS进行数据分析的一般步骤

    SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的关键在于遵循数据分析的一般步骤,但涉及的方面会相对较少.主要集中在以下几个阶段. 1.SPSS数据的准备阶 ...

  4. JVM内核-原理、诊断与优化学习笔记(五):GC参数

    文章目录 堆的回顾 串行收集器 并行收集器 ParNew(par-并行的缩写,new-新生代,所以只是新生代并行) Parallel收集器 参数设置 -XX:MaxGCPauseMills -XX:G ...

  5. ajax 接收json数据的进一步了解

    var url = "../searchclasses"; $.ajax({ url: url, type: "post", dataType: "j ...

  6. 面试问烂的 MySQL 查询优化,看完屌打面试官!

    Java技术栈 ,一般把连接数设置得大一些). 并发量:同一时刻数据库服务器处理的请求数量 3.超高的 CPU使用率:CPU资源耗尽出现宕机. 4.磁盘 IO:磁盘 IO性能突然下降.大量消耗磁盘性能 ...

  7. 使用Pyppeteer进行gmail模拟登录

    import asyncio import time from pyppeteer import launch async def gmailLogin(username, password, url ...

  8. 关于JQuery Ajax 跨域 访问.net WebService

    关于这个 jQuery Ajax跨域访问 WebService 前天整了好几个小时没整明白 今天再看一下 结果突然就顿悟了 1.建一个空webApplication --添加--新建项--web服务( ...

  9. 4-MySQL高级-事务-提交(3)

    提交 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1:查询商品分类信息 select * from goods_cates; step2:增加数据 终端2 ...

  10. HduOJ 2162 - Primes

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2161 题意:判断n是不是素数,输入到0停止.题目规定1 2 都不是素数. 题解:筛素数.老题目.不过这 ...