一、NoSQL
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
CAP定理(CAP theorem)
在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
NoSQL 数据库分类
列存储、文档存储、key-value存储、图存储、对象存储、xml数据库。
二、MongoDB
2.1 简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB 文档类似于 JSON 对象。
集合就是 MongoDB 文档组,类似于RDBMS中的表格。
2.2 常用命令
进入mongo shell控制台,可以对数据库进行操作
01. show dbs ==> 显示所有数据的列表
02. db ==> 显示当前数据库对象或集合
03. use * ==> 创建或连接到一个指定的数据库
04. db.dropDatabase() ==> 删除当前数据库
05. show tables ==> 显示集合
06. db.collection.drop() ==> 删除集合
07. db.collection.insert({}) ==> 向集合插入文档数据,insertOne,insertMany
08. db.collection.update({}, {}) ==> 更新集合中文档数据
09. db.collection.save({}) ==> 插入(指定_id时)或更新集合文档数据
10. db.collection.remove({}, Boolean) ==> 删除集合中文档数据
11. db.collection.find(query, projection) ==> 查询集合中文档数据,pretty()显示方式,{<key>:{$ne:<value>}}、{<key>:{$lt:<value>}}、{<key>:{$lte:<value>}}、{<key>:{$gt:<value>}}、{<key>:{$gte:<value>}}; $or: []; $type类型判断;
12. db.collection.find({},{}).limit(x).skip(y) ==> 限制和跳过
13. db.collection.find().sort({}) ==> 排序,1为升序排列,而-1是用于降序排列
14. db.collection.ensureIndex({}, {}) ==> 建立索引
10. db.collection.aggregate([{$group***}]) ==> 聚合,$sum、$avg、$min、$max、$push、$addToSet 、$first、$last;$project、$match、$limit、$skip、$unwind、$group、$sort、$geoNear;
10. db.collection.remove({}, Boolean) ==> 删除集合中文档数据
10. db.collection.remove({}, Boolean) ==> 删除集合中文档数据
10. db.collection.remove({}, Boolean) ==> 删除集合中文档数据
10. db.collection.remove({}, Boolean) ==> 删除集合中文档数据
db.collection.find(query, projection)
2.3 MongoDB 数据类型
String 字符串
Integer 整型数值
Boolean 布尔值
Double 双精度浮点值
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比
Arrays 用于将数组或列表或多个值存储为一个键
Timestamp 时间戳
Object 用于内嵌文档
Null 用于创建空值
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言
Date 日期时间
Object ID 对象 ID。用于创建文档的 ID
Binary Data 二进制数据
Code 代码类型
Regular expression 正则表达式类型
2.4 复制、分片、备份、恢复、监控
1. MongoDB复制是将数据同步在多个服务器的过程。
2. 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
3. 在Mongodb中我们使用mongodump命令来备份MongoDB数据。
mongodump -h dbhost -d dbname -o dbdirectory
4. mongodb使用 mongorestore 命令来恢复备份的数据。
mongorestore -h <hostname><:port> -d dbname <path>
5. MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况。
三、Nodejs MongoDB
1、安装
$ npm install mongodb
2、创建
MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
3、链接
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
});
4、插入
db.collection('site').insert([], function(err, result) {});
5、查询
db.collection('site').find({}). toArray(function(err, result) {});
6、更新
db.collection('site')..update({},{}, function(err, result) {});
7、插入
db.collection('site').remove([], function(err, result) {});
三、Nodejs MongoDB Mongoose
mongoose构建在mongodb(MongoDB数据库驱动)之上,提供了Schema、Model和Document对象,用起来更为方便。
3.1 connect
连接数据库
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/accounts');
var db = mongoose.connection;
db.on('error', function() {});
db.on('open', function() {});
db.on('close', function() {});
3.2 Schema
定义数据库数据结构
var userSchema = new mongoose.Schema({
name:{type: String, unique: true},
password:String
}, {collection: "accounts"} // optional
);
//String、Number、Boolean | Bool、Array、Buffer、Date、ObjectId、Mixed
3.3 Model
创建插入数据
new User({name:"**", password:"**"}).save(function(err, doc){});
User.create({name:"**", password:"**"}, function(err, doc){});
3.4 Model API
create()、find()、findOne()、update()、remove()