# 数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
目前比较主流的数据库划分方式为:关系型数据库、非关系型数据库。
# 关系型数据库
关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如某单位的职工关系就是一个二元关系。
由关系数据结构组成的数据库系统被称为关系数据库系统。
在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL是最重要的关系数据库操作语言。
# 非关系型数据库
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
# NoSQL的优点/缺点
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
# MongoDB 数据库
# 环境配置
步骤1: 先安装数据库服务
步骤2: 创建存放数据库的文件夹
在 C 盘创建一个名为 data 的文件夹,这个文件夹中,我们再创建一个名为 db 的文件夹。
注意:建议做成 c:\data\db,如果是其他名字,还得做额外的dbpath配置。
步骤3: 启动数据库服务
注意:建议在 bin 目录下启动,如果不在 bin 目录下启动,还得配置环境变量配置。
cd C:\Program Files\MongoDB\Server\3.4\bin
# 启动服务
mongod
2
命令运行后,会出现一堆的提示,最后一句是 I NETWORK [thread1] waiting for connections on port 27017 ,他表示在我们这台计算机中, MongoDB 服务与硬盘上的数据库文件已经关联上了,接下来我们就可以使用命令连接到 MongoDB 了。
数据库的默认端口是27017
# MongoDB 命令(不建议使用)
到这里,我们已经把数据库服务开启了,然后我们应该考虑是直接使用命令行操作数据库?还是通过nodejs代码操作数据库?
如果选择nodejs操作数据库,直接跳过下面的代码。
如果想使用命令行操作数据库,我们需要新开一个命令行窗口,然后进入到 C:\Program Files\MongoDB\Server\3.4\bin,然后执行 mongo.exe,表示连接到 MongoDB:
mongo # 使用数据库服务
mongo.exe 执行后,会进入到 MongoDB 的控制终端中。然后就可以写一些 mongo 命令了,比如 show dbs 表示显示所有的数据库。
show dbs
更多的mongodb命令应查看官方说明文档
# 查看所有数据库
show dbs
# 使用及创建数据库
use 数据库名称
# 查看当前数据库
db
# 查看当前数据库中所有的表(文档)
show collections
# 添加表数据(文档)自动创建表
db.表名.insert({name:'张三'})
# 查看数据
db.表名.find({条件})
# 修改数据
db.表名.update({条件}, {更新})
# 删除数据
db.表名.remove({条件})
# 删除表
db.表名.drop()
# 删除数据库
use 数据库名
db.dropDatabase()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 操作Mongodb
nodejs中有很多库能够快速操作mongodb数据库,官方推出的是 mongodb,第三方推出的是 mongoose、mongoskin等,开发时根据自己的喜好,用哪个都可以,我们介绍的是官方的mongodb库。
# MongoDB 使用方法(重点)
下载 MongoDB 驱动模块
cnpm i mongodb -S
引用
var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
var ObjectId = mongodb.ObjectID;
2
3
连接到数据库
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, database) {
// 操作数据库的代码,必须写在里面
//database.close(); // 关闭
});
2
3
4
5
# 进入到某个数据库
var db = database.db("数据库名称");
# 创建表
创建一个集合(集合在mongodb中指数据表)
db.createCollection("表名", (err, result)=>{});
重复创建将覆盖
# 插入数据
向表中插入数据
insert 插入数据时,如果表原本就不存在,那么会自动创建这个表。
var myobj = {"user":"张三", "pwd":"123"}
db.collection("表名").insertOne( myobj, (err, result)=>{} );
2
向表中插入多条数据
var myobj = [{...},{...},{...},{...}.....]
db.collection("表名").insertMany( myobj, (err, result)=>{} );
2
# 查询数据
# 查询所有数据
var where = {}
db.collection("表名").find(where).toArray( (err, result)=>{
console.log( result );
} )
2
3
4
# 等于
// where user=""
...find( {user:""} )
2
# 并且
// where user="" and pwd=""
...find( {user:"", pwd:""} )
2
# 或者
// where user="" or pwd=""
...find( {$or:[{user:""}, {pwd:""}]} )
2
# 包含
// where user in ("", "")
...find( {user:{$in:["", ""]}} )
2
# 不包含
// where user not in ("", "")
...find( {user:{$nin:["", ""]}} )
2
# 大于
// where pwd>100
...find( {pwd:{$gt:100}} )
2
# 大于等于
// where pwd>=100
...find( {pwd:{$gte:100}} )
2
# 小于
// where pwd<100
...find( {pwd:{$lt:100}} )
2
# 小于等于
// where pwd<=100
...find( {pwd:{$lte:100}} )
2
# 数字范围
// where pwd>100 and pwd<200
...find( {pwd:{$gt:100, $lt:200}} )
2
# 模糊查询
// where name like '%国%'
...find( {name: /.+国.+/} ) // 正则
2
# 查询指定字段
// select user, pwd from 表
var query = {user:1, pwd:1} // 1 表示显示;0 表示隐藏
db.collection("表").find().project(query).toArray((err, result)=>{})
2
3
4
# 排序
// select * from 表 order by user asc, pwd desc
var mysort = {user:1, pwd:-1} // 1 表示升序; -1 表示降序
db.collection("表").find().sort(mysort).toArray((err, result)=>{})
2
3
4
# 翻页
// skip(5) 表示跳过5条
// limit(5) 表示取出5条
db.collection("表").find().skip(5).limit(5).toArray((err, result)=>{})
2
3
4
# 数量
// select count(*)
db.collection("表").find().count().then(result=>{
console.log( result );
})
2
3
4
5
# ObjectID
var ObjectId = require("mongodb").ObjectID;
...find( {_id:ObjectId("5b2f7211368e95581be262a6")} )
2
3
# 更新数据
var whereObj = {user:"张三"}
var updateObj = {$set:{"user":"李四"}}
db.collection("表").updateOne(whereObj, updateObj, (err, result)=>{})
2
3
updateMany() 更新多条记录
# 删除数据
var whereObj = {user:"张三"}
db.collection("表").deleteOne(whereObj, (err, result)=>{})
2
deleteMany() 删除多条记录
# 删除表
db.collection("表名").drop( (err, delOk)=>{
if( delOk == true ){
console.log("删除成功");
}
} );
2
3
4
5