Skip to content

数据库

数据库(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 目录下启动,还得配置环境变量配置。

bash
cd C:\Program Files\MongoDB\Server\3.4\bin
bash
# 启动服务
mongod

命令运行后,会出现一堆的提示,最后一句是 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:

bash
mongo		# 使用数据库服务

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

bash
show dbs

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

bash
# 查看所有数据库
show dbs

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

# 查看当前数据库
db

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

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

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

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

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

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

# 删除数据库
use 数据库名
db.dropDatabase()

操作Mongodb

nodejs中有很多库能够快速操作mongodb数据库,官方推出的是 mongodb,第三方推出的是 mongoose、mongoskin等,开发时根据自己的喜好,用哪个都可以,我们介绍的是官方的mongodb库。

MongoDB 使用方法(重点)

下载 MongoDB 驱动模块

bash
cnpm i mongodb -S

引用

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

连接到数据库

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

进入到某个数据库

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

创建表

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

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

重复创建将覆盖

插入数据

向表中插入数据

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

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

向表中插入多条数据

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

查询数据

查询所有数据

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

等于

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

并且

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

或者

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

包含

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

不包含

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

大于

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

大于等于

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

小于

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

小于等于

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

数字范围

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

模糊查询

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

查询指定字段

javascript
// select user, pwd from 表

var query = {user:1, pwd:1}	// 1 表示显示;0 表示隐藏
db.collection("表").find().project(query).toArray((err, result)=>{})

排序

javascript
// select * from 表 order by user asc, pwd desc

var mysort = {user:1, pwd:-1}	// 1 表示升序; -1 表示降序
db.collection("表").find().sort(mysort).toArray((err, result)=>{})

翻页

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

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

数量

javascript
// select count(*)

db.collection("表").find().count().then(result=>{
	console.log( result );
})

ObjectID

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

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

更新数据

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

updateMany() 更新多条记录

删除数据

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

deleteMany() 删除多条记录

删除表

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