# 数据库

数据库(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
1
# 启动服务
mongod
1
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		# 使用数据库服务
1

mongo.exe 执行后,会进入到 MongoDB 的控制终端中。然后就可以写一些 mongo 命令了,比如 show dbs 表示显示所有的数据库。

show dbs
1

更多的mongodb命令应查看官方说明文档

# 查看所有数据库
show dbs

# 使用及创建数据库
use 数据库名称

# 查看当前数据库
db

# 查看当前数据库中所有的表(文档)
show collections

# 添加表数据(文档)自动创建表
db.表名.insert({name:'张三'}) 

# 查看数据
db.表名.find({条件})

# 修改数据
db.表名.update({条件}, {更新})

# 删除数据
db.表名.remove({条件})

# 删除表
db.表名.drop()

# 删除数据库
use 数据库名
db.dropDatabase()
1
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
1

引用

var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
var ObjectId = mongodb.ObjectID;
1
2
3

连接到数据库

var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, database) {
	// 操作数据库的代码,必须写在里面
	//database.close();	// 关闭
});
1
2
3
4
5

# 进入到某个数据库

var db = database.db("数据库名称");
1

# 创建表

创建一个集合(集合在mongodb中指数据表)

db.createCollection("表名", (err, result)=>{});
1

重复创建将覆盖

# 插入数据

向表中插入数据

insert 插入数据时,如果表原本就不存在,那么会自动创建这个表。

var myobj = {"user":"张三", "pwd":"123"}
db.collection("表名").insertOne( myobj, (err, result)=>{} );
1
2

向表中插入多条数据

var myobj = [{...},{...},{...},{...}.....]
db.collection("表名").insertMany( myobj, (err, result)=>{} );
1
2

# 查询数据

# 查询所有数据

var where = {}
db.collection("表名").find(where).toArray( (err, result)=>{
	console.log( result );
} )
1
2
3
4

# 等于

// where user=""
...find( {user:""} )
1
2

# 并且

// where user="" and pwd=""
...find( {user:"", pwd:""} )
1
2

# 或者

// where user="" or pwd=""
...find( {$or:[{user:""}, {pwd:""}]} )
1
2

# 包含

// where user in ("", "")
...find( {user:{$in:["", ""]}} )
1
2

# 不包含

// where user not in ("", "")
...find( {user:{$nin:["", ""]}} )
1
2

# 大于

// where pwd>100
...find( {pwd:{$gt:100}} )
1
2

# 大于等于

// where pwd>=100
...find( {pwd:{$gte:100}} )
1
2

# 小于

// where pwd<100
...find( {pwd:{$lt:100}} )
1
2

# 小于等于

// where pwd<=100
...find( {pwd:{$lte:100}} )
1
2

# 数字范围

// where pwd>100 and pwd<200
...find( {pwd:{$gt:100, $lt:200}} )
1
2

# 模糊查询

// where name like '%国%'
...find( {name: /.+国.+/} )		// 正则
1
2

# 查询指定字段

// select user, pwd from 表

var query = {user:1, pwd:1}	// 1 表示显示;0 表示隐藏
db.collection("表").find().project(query).toArray((err, result)=>{})
1
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)=>{})
1
2
3
4

# 翻页

// skip(5)	表示跳过5条
// limit(5)	表示取出5条

db.collection("表").find().skip(5).limit(5).toArray((err, result)=>{})
1
2
3
4

# 数量

// select count(*)

db.collection("表").find().count().then(result=>{
	console.log( result );
})
1
2
3
4
5

# ObjectID

var ObjectId = require("mongodb").ObjectID;

...find( {_id:ObjectId("5b2f7211368e95581be262a6")} )
1
2
3

# 更新数据

var whereObj = {user:"张三"}
var updateObj = {$set:{"user":"李四"}}
db.collection("表").updateOne(whereObj, updateObj, (err, result)=>{})
1
2
3

updateMany() 更新多条记录

# 删除数据

var whereObj = {user:"张三"}
db.collection("表").deleteOne(whereObj, (err, result)=>{})
1
2

deleteMany() 删除多条记录

# 删除表

db.collection("表名").drop( (err, delOk)=>{
	if( delOk == true ){
		console.log("删除成功");
	}
} );
1
2
3
4
5