概述
结构型数据库
传统的数据库MySQL、SQL Server、Oracle、Access都是SQL结构型数据库。
优点:查找快、有主键的概念、从键、主从查找、映射等等的高级数据库的概念。
缺点:如果今后需要增加字段,之前的所有的条目,也要一起增加。特别耗费时间,也就是说灵活性不够。
非关系型数据库
MongoDB(文档型数据库)、Redis(K-V对型数据库),他们都是NoSQL。
非关系型数据库现在已经广泛的应用于:社交平台、APP通信记录、银行流水、电信通话详单等等。任何只需要保存,但是不需要精确查找的使用场景,都可以用非关系型数据库。
MongoDB 安装
下载地址:https://www.mongodb.com/download-center#community
下载完成会安装一个bin
文件夹,bin
文件夹中提供的 exe
文件,不要双击运行,而是应该在 cmd
中运行,他们是 CLI 程序。此时如果用cd命令切换进来,不方便,所以我们要把这个bin文件夹设置为环境变量,此时就能够在系统的任何一个位置,使用MongoDB的CLI命令。
总结:数据库根本不需要安装,我们仅仅下载了一个rar文件,解压缩之后,把bin路径设置为环境变量,数据库就配置好了。
数据库的开机
在C盘根目录创建一个 MongoDBdata
文件夹。
开启数据库:
1 | mongod --dbpath C:\MongoDBdata |
使用mongod
这个CLI来进行开机,需要配置一个参数--dbpath
,表示数据库存在哪里。
使用数据库的时候,不能关闭这个CMD窗口,关闭了,数据库也关闭了。
数据库的使用
- 新建一个CMD窗口,用mongo命令管理数据库。
1 | mongo |
执行上述命令会进入 mongo 内部光标。
- 创建一个数据库:
1 | use student |
use表示使用一个数据库,如果数据库不存在,就自动创建一个。
- 创建一个集合,并且插入数据
1 | db.banji.insert({"name":"小明","age":12,"sex":"男"}); |
当你使用use
之后,永远用db
来表示当前数据库。
db
打点表示集合,现在创建了一个集合叫做banji
。使用insert
来插入文档,文档就是JSON。
- 查找全部数据
1 | db.banji.find({}) |
查询所有男生:
1 | db.banji.find({"sex":"男"}) |
- 查看当前数据库(就是你use的那个数据库)中有多少个集合:
1 | show collections |
- 查看一共有多少数据库:
1 | show dbs |
可视化管理工具
CMD太难用了,但是以后你部署到Linux中,常用的还是CLI管理数据库。
MongoDB的可视化管理工具,最好用的就是MongoBooster,自己安装即可。
- 导入和导出数据
1 | mongoimport --db student --collection banji0910 --drop --file C:\Users\Danny\Desktop\1.json |
mongoimport
命令负责导入数据,--db
表示选择数据库,--collection
表示选择集合,--drop
表示删除之前的数据--file
表示文件地址,注意路径可以相对,可以绝对。
当然,最简单的还是直接从可视化工具中的import
按钮直接导入。
MongoDB 的 CRUD 操作
CRUD就是增删改查的意思。我们先学习在shell中的操作,然后用nodejs操作Mongo。
MongoDB可以被PHP、Java、.net链接,也能被node链接,所以有很多版本。我们现在学习shell版本,在控制台中操作数据库。
1. 查找数据
1 | db.banji.find(JSON条件) |
寻找具体姓名的条目:
1 | db.banji.find({"name":"小明"}) |
且逻辑,就是JSON中多几个项目就可以了:
1 | db.banji0910.find({"sex":"男","age" : {$gt : 11}}) |
常见的符号$gt
大于,$lt
小于,$ne
不等于,$in
区间。
如果结构比较复杂,可以用连续打点语法。
或逻辑,寻找女生或者小于12岁的男生:
1 | db.banji.find({$or : [{"sex" : "女"},{"age" : {$lt : 13}}]}); |
排序结果,用sort。
1 | db.banji.find({$or : [{"sex" : "女"},{"age" : {$lt : 13}}]}).sort({"age":-1}); |
1表示正序,-1表示倒序。
2. 增加数据
1 | db.banji.insert({"name":"小丹尼","age":32,"sex":"男"}) |
3. 更改数据
一定记住用$set
引导。两个JSON,分别是更改谁、改为什么:1
db.banji.update({"name":"小红"},{$set:{"sex" : "男"}})
更改多个条目:
1 | db.banji0910.update({"sex":"男"},{$set : {"sex" : "女"}},{ multi: true}) |
4. 删除条目
仅仅删除一条:
1 | db.restaurants.remove( { "borough": "Queens" }, { justOne: true } ) |
如果不写{justOne:true}
就会删除所有匹配的。
删除所有年龄大于12岁的:
1 | db.banji.remove({"age" : {$gt : 12}}) |
NodeJS 下使用 MongoDB
首先npm上下载一个mongodb的模块,
1 | npm install mongodb --save |
标准DEMO:
1 | //得到mongo客户端 |
所有的CRUD操作都应该在链接数据库的回调函数里面。
- 插入数据:
1 | db.collection("banji0910").insertOne( |
- 修改数据:
1 | db.collection("banji0910").updateMany( |
- 删除数据,删除所有条目:
1 | db.collection("banji0910").removeMany( |
- 复杂查找:
1 | db.collection("banji0910").find( |
表单提交
- HTML表单页:
1 | <form action="http://127.0.0.1:3000/form_post" method="post"> |
数据库开机:
1
mongod --dbpath c:\MongoDBdata
进入可视化工具使用数据库
表单处理.js
1 | var express = require("express"); |
当HTML表单页做出提交时:控制台输出:1
{ name: 'Beme', age: '22', sex: '男' }
- 提交到 MongoDB 数据库
1 | var express = require("express"); |