Nodejs之路(四)—— MongoDB&MySQL
一、MongoDB
1.1概述
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
关系型数据库和非关系型数据库
关系型数据库:表与表之间存在关系
所有的关系型数据可以都需要通过
sql
语言来操作所有的关系型数据库在操作之前都需要设计表结构
所有关系型数据库支持约束:
唯一的
主键
默认值
非空
非关系型数据库
有的非关系型数据库就是
key-value
对儿,没有表MongoDB是长得最像关系型数据库的非关系型数据库
数据库->数据库
数据表->集合(数组)
表记录->文档对象
MongoDB不需要设计表结构,也就是说可以任意往里面存储数据,没有结构性这么一说
MongoDB数据库的基本概念
数据库——mongodb下可以有多个数据库
集合——一个数据库可以有多个集合(相当于MySQL中的表)
文档——一个集合可以有多个文档(相当于MySQL中的表记录)
- 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/docs/guides.html
官方API文档:https://mongoosejs.com/docs/api.html
起步
安装:
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'));
官方指南
设计 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的更多相关文章
- python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点
python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别 ...
- TODO:MongoDB MySQL数据库备份
TODO:MongoDB MySQL数据库备份 1. MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodu ...
- 我的VSTO之路(四):深入介绍Word开发
原文:我的VSTO之路(四):深入介绍Word开发 在上一篇文章中,我介绍了Word的对象模型和一些基本开发技巧.为了更好的介绍Word插件开发,我为本文制作了一个Word书签的增强版,具体功能是让用 ...
- 第四章 MySQL高级查询(二)
第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...
- Python/MySQL(四、MySQL数据库操作)
Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...
- 第四章 MySQL数据类型和运算符
5.1 MySQL数据类型介绍 一.数据类型简介 (1) 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容 (2) 不同的数据类型也决定了 My ...
- redis mongodb mysql 三大数据库的更简单的批量操作。批量任务自动聚合器。
1.redis mongodb mysql的python包都提供了批量插入操作,但需要自己在外部对一个例如1000 001个任务进行分解成每1000个为1个小批次,还要处理整除批次数量后的余数,如果做 ...
- centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课
centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课 mysq ...
- nodejs之路-[0]安装及简易配置
题外话: 之前写过ubuntu下编译nodejs- 传送门:Ubuntu15.04编译安装nodejsV0.12.3 只是如今基本在win下做开发了-. 就以这篇帖子为开头,作为我踏上nodejs之路 ...
- nodejs取参四种方法req.body,req.params,req.param,req.body
摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...
随机推荐
- 约数个数求和+线性筛约数——bzoj3994
这题首先要会线性筛约数个数,并求出前缀和 bool vis[maxn]; int mm,mu[maxn],prime[maxn],num[maxn],sum[maxn],d[maxn],sum1[ma ...
- SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件,本文主要介绍SecureCRT的使用方法和技巧
SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件,本文主要介绍SecureCRT的使用方法和技巧 VanDyke CRT 和 VanDyk ...
- SPSS进行数据分析的一般步骤
SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的关键在于遵循数据分析的一般步骤,但涉及的方面会相对较少.主要集中在以下几个阶段. 1.SPSS数据的准备阶 ...
- JVM内核-原理、诊断与优化学习笔记(五):GC参数
文章目录 堆的回顾 串行收集器 并行收集器 ParNew(par-并行的缩写,new-新生代,所以只是新生代并行) Parallel收集器 参数设置 -XX:MaxGCPauseMills -XX:G ...
- ajax 接收json数据的进一步了解
var url = "../searchclasses"; $.ajax({ url: url, type: "post", dataType: "j ...
- 面试问烂的 MySQL 查询优化,看完屌打面试官!
Java技术栈 ,一般把连接数设置得大一些). 并发量:同一时刻数据库服务器处理的请求数量 3.超高的 CPU使用率:CPU资源耗尽出现宕机. 4.磁盘 IO:磁盘 IO性能突然下降.大量消耗磁盘性能 ...
- 使用Pyppeteer进行gmail模拟登录
import asyncio import time from pyppeteer import launch async def gmailLogin(username, password, url ...
- 关于JQuery Ajax 跨域 访问.net WebService
关于这个 jQuery Ajax跨域访问 WebService 前天整了好几个小时没整明白 今天再看一下 结果突然就顿悟了 1.建一个空webApplication --添加--新建项--web服务( ...
- 4-MySQL高级-事务-提交(3)
提交 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1:查询商品分类信息 select * from goods_cates; step2:增加数据 终端2 ...
- HduOJ 2162 - Primes
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2161 题意:判断n是不是素数,输入到0停止.题目规定1 2 都不是素数. 题解:筛素数.老题目.不过这 ...