Appearance
数据库
数据库(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\binbash
# 启动服务
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("删除成功");
}
} );