一、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. java.lang.InstantiationException: com.lch.commder.entity.Car 已解决

    以上的上异常,是你的类实例化对象失败的时候抛出异常,这种异常多会出现在抽象类中,在使用反射的机制时,解决方法很简单 在你的类中再加一个空构造方法

  2. NX二次开发-创建经典工具栏UF_UI_create_toolbar

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  3. [JZOJ 5811] 简单的填数

    题意:自己搜吧... 思路: 记二元组\((x,l)\)表示当前为\(x\)且之前有\(l\)个连续数与\(x\)相同. 并且维护up和low数组表示取到最大/最小值时,连续序列的长度. 正一遍,反一 ...

  4. 最常见VC++编译错误信息集合

    1.fatal error C1010: unexpected end of file while looking for precompiled header directive. 寻找预编译头文件 ...

  5. 使用 Lookaside List 分配内存

    1. 概述 windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式.每次从 look ...

  6. Git 本地仓库管理

    目录 目录 基本概念 配置 配置个人帐号信息 安装 本地版本库 创建 Git 仓库 Git 仓库版本回退 修改管理 基本概念 工作区(Working Directory): 就是你在电脑里能看到的目录 ...

  7. 网页重构应该避免的10大CSS糟糕用法

    对于网页重构来说,CSS禅意花园 是网页布局从 table 表格转到了 html +css 的标志 .这些年来,随着我们的网站越来越复杂:html5,css3,新的技术.新的属性,越来越多的开发者开始 ...

  8. sklearn中回归器性能评估方法

    explained_variance_score() mean_absolute_error() mean_squared_error() r2_score() 以上四个函数的相同点: 这些函数都有一 ...

  9. element-ui表格合计不显示&被遮挡问题

    step1:修改全局样式 .el-table{ overflow:visible !important; } .el-card__body { padding: 20px 20px 50px 20px ...

  10. jsonArray转换成List

    从字符串String转换成List 字符串格式: String jsonstr = "{'studentsjson':[{'student':'张三'},{'student':'李四'}] ...