node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例

文章目录

  • 8. MongoDB
      • 8.1关系型数据库和非关系型数据库表
      • 8.2连接和退出数据库
      • 8.3 基本命令
      • 8.4 在 Node 中如何操作 MongoDB
        • 使用官方的 `mongodb` 包来使用
        • 使用第三方 `mongoose` 来操作MongoDB
        • 1.基本概念
        • 2.起步:
        • 3.官方指南
          • 3.1设计Schema 发布 Model
          • 3.2 增加 数据
          • 3.3 查询数据
          • 3.4 删除数据
          • 3.5 更新数据
      • 其它
      • 数组的所有方法
  • 9.使用 Node 操作 MySQL 数据库
    • 安装:
      • 注意:先打开服务
  • 10.Promise
    • 1.回调地狱:`callback hell`
    • 2.无法保证顺序的代码:
    • 3.Promise 基本语法:
    • 4.异步编程语法:
      • 4.1封装 API :

8. MongoDB

近两日的笔记整理 MongoDB + mqsql + Peomise 课堂案例

8.1关系型数据库和非关系型数据库表

表就是关系,或者说表与表之间存在关系

  • 所有的关系型数据库都需要通过 sql 语言来操作
  • 所有的关系型数据库都需要在操作前都需要设计表结构
  • 还需要支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空
  • 非关系型数据库非常的灵活
  • 有的非关系型数据库就是 键值对
  • 但是 MongoDB 是长得最像关系数据库和非关系数据库
    • 数据库 -> 数据库
    • 数据表 -> 集合(数组)
    • 表记录 -> 文档对象
  • MongoDB 不需要设计表结构
  • 也就是说你可以任意的往里面存数据,没有结构性这么一说

MongoDB中文文档

https://www.runoob.com/mongodb/mongodb-tutorial.html

启动:

# 注意: mongdd 默认使用执行 mongod 命令所处盘符根目录下的 /data/db 作为自己的数据存储目录
mongod
# 如果想要修改默认的数据存储目录。可以:
mongod --dbpath=数据存储目录路径

停止:

# 在开启服务的控制才,ctrl+c
# 或者直接关闭

8.2连接和退出数据库

连接:

mongo

退出:

exit

8.3 基本命令

  • show dbs

    • 查看当前数据库
  • db

    • 查看当前操作的数据库
  • use 数据库名称

    • 切换到指定数据库(如果没有就新建)
  • 插入数据

8.4 在 Node 中如何操作 MongoDB

使用官方的 mongodb 包来使用

  • 网址:https://www.npmjs.com/package/mongodb

使用第三方 mongoose 来操作MongoDB

第三方包: mongoose 基于mongodb 包再次封装。

  • 网址:https://mongoosejs.com/

1.基本概念

  • 数据库
  • 一个数据库中有多个集合,多个集合里可以有多个文档
  • 文档
{
	qq:{
        shuju1:[
            
        ],
            ....
	},
    taobao:{
        
	},
    baidu:{
	}
}

2.起步:

安装:

npm i mongoose

hello world:

const mongoose = require('mongoose');

// 连接mongodb数据库
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

/* 创建一个模型
即使在设计数据库
它是动态的非常灵活,只需要在代码中设计
 */
// 实例化cat
const Cat = mongoose.model('Cat', { name: String });

// 持久化保存 kitty 实例
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));

3.官方指南

3.1设计Schema 发布 Model
// 连接数据库

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

// 指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
mongoose.connect('mongodb://localhost/itcast');

/* 设计集合结构(表结构)
字段名称就是表结构中的属性名称
约束的目的是为了保证数据的完整性,不要有脏数据 */
var userSchema = new Schema({
    username: {
        type: String,
        require: true
    },
    password: {
        type: String,
        required: true
    },
    email: {
        type: String
    }
});

// 3.将文档结构发布为模型
/*    mongoose.model 方法就是用来将一个架构发布为 model
第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称, mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称;
例如这里的 Uer 最终会变成 users 的集合名称
第二个参数: 架构 Schema
    返回值:模型构造函数 */
var User = mongoose.model('User', userSchema);

// 4.当我们有了模型构造函数之后,就可以这个构造函数对 User 集合中的数据可以为所欲为了

期间要确保数据库已经在 cmd 开启

3.2 增加 数据
var admin = new User({
    username: 'admin',
    password: '123',
    email: '[email protected]'
});

admin.save(function(err, ret) {
    if (err) {
        console.log('保存失败');
    } else {
        console.log('保存成功');
    }
})

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第1张图片

3.3 查询数据
// -----查询数据------
// User.find(function(err, ret) {
//     if (err) {
//         console.log('查询失败');
//     } else {
//         console.log(ret);
//     }
// });
// 按条件查询,我要查 name 为 zs 的
// 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);
        }
    }); // 返回的结果直接就是一个对象
3.4 删除数据

根据条件删除所有:

// ------删除数据------
// 还有 remove 方法。但是现在有一些已经废除了,少用
// 现在还是用 `deleteMany` 或者 `deleteOne` 方法比较多
User.deleteMany({
        // 有多少个 zs  全部都一起删除掉
        username: 'zs1'
    },
    function(err, ret) {
        if (err) {
            console.log('删除失败');
        } else {
            console.log('删除成功');
            console.log(ret);
        }
    });

根据条件删除一个:

Model.findOneAndRemove(conditions,[options],[callback]);

根据 id 删除一个:

Model.findByIdAndRemove(id,[options],[callback]);
3.5 更新数据
// ------g更新数据----
// findByIdAndUpdate 方法比较老

User.findOneAndUpdate('5f01fae13d2e5c10f830b428', {
    username: '22222'
}, function(err, ret) {
    if (err) {
        console.log('更新失败');
    } else {
        console.log('更新成功');
    }
});

其它

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第2张图片
Win32位下载,后面加上i386跳转。

数组的所有方法

  • every
  • some
  • includes
  • map
  • reduce (神奇的方法,有时间自学)

9.使用 Node 操作 MySQL 数据库

安装:

npm i mysql 
var mysql = require('mysql');

// 1.创建连接
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'users' //这里不小心把数据库名字和表明一样
});

// 2.连接数据库
connection.connect();

// 3.执行数据操做
connection.query('SELECT * from `users`', function(error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results);
});

// 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();

注意:先打开服务

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第3张图片

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第4张图片


10.Promise

1.回调地狱:callback hell

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第5张图片

2.无法保证顺序的代码:

// 回调地狱案例
var fs = require('fs');

fs.readFile('./data/a.txt', 'utf8', function(err, data) {
    if (err) {
        // return console.log('读取失败');
        // 抛出异常
        // 1阻止程序的执行
        // 2把错误消息打印到控制台
        // 一般用于测试代码
        throw err
    }
    console.log(data);
});

fs.readFile('./data/b.txt', 'utf8', function(err, data) {
    if (err) {
        throw err
    }
    console.log(data);
});

fs.readFile('./data/c.txt', 'utf8', function(err, data) {
    if (err) {
        throw err
    }
    console.log(data);
})

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第6张图片

执行顺序不一定一样,一般都是文件小的先读。

如何保证顺序?通过回调嵌套的方式:

// 回调地狱案例
var fs = require('fs');

fs.readFile('./data/a.txt', 'utf8', function(err, data) {
    if (err) {
        // return console.log('读取失败');
        // 抛出异常
        // 1阻止程序的执行
        // 2把错误消息打印到控制台
        // 一般用于测试代码
        throw err
    }
    console.log(data);

    // a 读完了再读 b
    fs.readFile('./data/b.txt', 'utf8', function(err, data) {
        if (err) {
            throw err
        }
        console.log(data);

        // b 读完了再读 c
        fs.readFile('./data/c.txt', 'utf8', function(err, data) {
            if (err) {
                throw err
            }
            console.log(data);
        })
    });
});

但是这种方法,难维护。

为了解决以上编码方式带来的问题,所以在 ES6 中新增一个 API:Primise

  • 意思: 承诺,保证

3.Promise 基本语法:

const { promises, fstat } = require("fs")

var fs = require('fs');

// 在 es6 中新增了 一个 API  promises 是构造函数

console.log(1);


// 1.创建 promise 容器
//  1.1 给别人一个承诺,容器一旦创建,就开始执行里面的代码
var p1 = new Promise(function(resolve, reject) {
    console.log(2);
    fs.readFile('../data/a.txt', 'utf-8', function(err, data) {
        if (err) {
            // 失败了 表示这容器中的任务失败了
            // console.log(err);
            reject(err); // 把容器的 pending 状态变为 Rejected
        } else {
            // console.log(3);
            // // 成功了 表示这容器中的任务成功了
            // console.log(data);

            // 把容器的 Pending 状态改为成功的 Resolve
            resolve(data);
        }
    });
});

// console.log(4); // 1243 aaa

// 当 p1 成功了,然后(then) 做指定的操作
// then 方法接受的 fun 就是容器中的 resolve 函数!!注意
p1.
then(function(data) {
    console.log(data);
}, function(err) {
    // then 方法接受的 fun 就是容器中的 reject 函数!!注意
    console.log(err);
})

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第7张图片
node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第8张图片


4.异步编程语法:

var fs = require('fs');

// 在 es6 中新增了 一个 API  promises 是构造函数

// 1.创建 promise 容器
//  1.1 给别人一个承诺,容器一旦创建,就开始执行里面的代码
var p1 = new Promise(function(resolve, reject) {
    fs.readFile('../data/a.txt', 'utf-8', function(err, data) {
        if (err) {
            // 失败了 表示这容器中的任务失败了
            // console.log(err);
            reject(err); // 把容器的 pending 状态变为 Rejected
        } else {
            // console.log(3);
            // // 成功了 表示这容器中的任务成功了
            // console.log(data);

            // 把容器的 Pending 状态改为成功的 Resolve
            resolve(data);
        }
    });
});

var p2 = new Promise(function(resolve, reject) {
    fs.readFile('../data/b.txt', 'utf-8', function(err, data) {
        if (err) {
            reject(err); // 把容器的 pending 状态变为 Rejected
        } else {
            resolve(data);
        }
    });
});

var p3 = new Promise(function(resolve, reject) {
    fs.readFile('../data/c.txt', 'utf-8', function(err, data) {
        if (err) {
            reject(err); // 把容器的 pending 状态变为 Rejected
        } else {
            resolve(data);
        }
    });
});

// console.log(4); // 1243 aaa

// 当 p1 成功了,然后(then) 做指定的操作
// then 方法接受的 fun 就是容器中的 resolve 函数!!注意
p1
    .then(function(data) {
        console.log(data);

        // 当 p1 成功的时候,这里 return 什么,下面的then 的data 就是什么
        // return 123
        // 注意:当你 返回123 后面就接收到123  你传 p2 为一个 Promise 对象的时候,后续的 then 中的方法的第一个参数会作为 p2 的 resolve
        return p2
    }, function(err) {
        // then 方法接受的 fun 就是容器中的 reject 函数!!注意
        console.log(err);
    })
    .then(function(data) {
        console.log(data); //这里得到的就是上个then 返回的 123
        return p3
    })
    .then(function(data) {
        console.log(data);
    })

node.js入门到放弃Day3(黑马李鹏周老师)——近两日的笔记整理 MongoDB + mqsql + Promise 课堂案例_第9张图片

4.1封装 API :

var fs = require('fs');

function pReadFild(filePath) {
    return new Promise(function(resolve, reject) {
        fs.readFile(filePath, 'utf-8', function(err, data) {
            if (err) {
                reject(err); // 把容器的 pending 状态变为 Rejected
            } else {
                resolve(data);
            }
        });
    });
}

pReadFild('../data/a.txt')
    .then(function(data) {
        console.log(data);
        return pReadFild('../data/b.txt')
    })
    .then(function(data) {
        console.log(data); //这里得到的就是上个then 返回的 123
        return pReadFild('../data/c.txt')
    })
    .then(function(data) {
        console.log(data);
    })

此课程没有课件资源,都是手动整理,多少有出入。。

你可能感兴趣的:(Vue与Node学习,mongodb)