MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
常用命令
show dbs 查看数据库
use dbname 创建数据库 如果不存在创建数据库,否则切换到数据库
show collections 显示数据库集合
1.添加数据
db.web.save({"name": "meiejuna"}) 创建了名称为 web 的名称,名
db.web.insert({"name": "meijuna"})
插入相同的数据,sava 覆盖,insert 报错
2.删除数据
db.students.remove( {} ) 删除 students 集合下的所有数据
db.students.remove({"name": "meijuna" }) 删除 students 集合为 name 为 meijuna 的数据
db.students.drop() or db.runCommand({""})删除 students 集合
db.runCommand( { dropDaatabase: 1 } ) 删除当前数据库
3.修改数据
db.students.updata({"name": "meijuna"},set:{"sex":"women"}) 单行修改
db.students.updata({"name": "meijuna"},{$set:{"sex":"women"}}, true, true) 多行修改
//{查找条件} , { 修改内容 } 匹配所有条件数据 修改所有匹配项
4.查找数据
db.students.find() 查找 students 集合中的 所有 数据
db.students.findONe() 查找 students 集合中的 第一条 数据
db.students.find().pretty() 可视化查询
5.排序
db.students.find().sort({"age": 1}) 1 升 -1 降序
6.截取
db.students.find().skip(2) 下标为 2 开始截取
db.students.find().limit(2) 截取 2 条数据
7.筛选显示
db.students.find({age:20},{_id:0,age:1,name:1})
0,筛选的结果不显示,1筛选结果显示
SQL简介
-
关系型数据库 以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。表与表之间的数据记录有关系。
-
关系型数据库有:mySql oracle SqlServer Access **db2 ** 等
NoSQL简介
- NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
- NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
- 非关系型数据库: MongoDB,Redis,HBase,**CouchDB ** 等
非关系型数据库与关系型数据库区别
关系型数据库的优势:
1. 复杂查询
- 可以用SQL语句方便的在多个表之间做非常复杂的数据查询。
2. 事务支持
- 使得对于安全性能很高的数据访问要求得以实现。
非关系型数据库的优势:
1. 性能
- NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2. 可扩展性
- 同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
MongoDB优点
它的特点是高性能、易部署、易使用,存储数据非常方便。
主要功能特性有:
-
面向集合存储,易存储对象类型的数据。
-
模式自由。
-
支持动态查询。
-
支持完全索引,包含内部对象。
-
支持查询。
-
支持复制和故障恢复。
-
使用高效的二进制数据存储,包括大型对象(如视频等)。
-
自动处理碎片,以支持云计算层次的扩展性
-
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
-
文件存储格式为BSON(一种JSON的扩展)
BSON 存储格式
BSON是一种类似json的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,**如Date和BinData类型。
BSON有三个特点:轻量性、可遍历性、高效性。
非关系型数据库文件存储格式为 BSON(一种JSON的扩展)。
MongoDB下载与安装
1. MongoDB下载:
https://www.mongodb.com/download-center#community>
2. 设置环境变量
在环境变量窗口中一般有两个变量,一个是你当前所使用的用户独有的环境变量,另一个是所有用户都可以访问的系统变量。其实如果在你的电脑上你只使用一个用户的话,那么不管你修改的用户的环境变量还是系统变量,效果都是一样的。为了以防未来会新建其他用户,那么我建议你修改系统变量而不是某个用户独有的环境变量。
3. 测试连接
- 管理员身份运行 cmd 输入
mongo
- 启动 mongdb 服务
net start mongdb
- 关闭 mongdb 服务
net stop MongoDB
4. 安装可视化工具(Robo 3T)
https://robomongo.org/download
node 使用 MongoDB
连接 MongoDB
//1. 下载 mongoose
cnpm i mongoose -D
//2. 引入 mongoose
const mongoose = require( 'mongoose');
//3. 连接 mongoose
// 连接本地mongodb ,本机的ip 127.0.0.1,端口:27017 数据库:student
mongoose.connect("mongodb://127.0.0.1:27017/student",function(err){
if(!err){
console.log("connected to Mongodb"); //连接成功
}else{
throw err;//如果连接失败,则抛出异常
}
});
存储数据
Schema不仅定义了文档结构和使用性能,还可以有扩展插件、实例方法、静态方法、复合索引、文档生命周期钩子。
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity : 由Model创建的实体,他的操作也会影响数据库
存储数据步骤:定义Schema (骨架) > 创建model(模型)> Entity实例化方法。
const mongoose = require( 'mongoose');
const Schema = mongoose.Schema;
mongoose.connect( 'mongodb://127.0.0.1:27017/meijuna',(error) => {
if ( error ) {
throw error
} else {
console.log( 'database is connected~')
}
})
const userSchema = new Schema({ //定义数据模型
username: String,
password: String
})
//通过模式studentSchema 创建一个模型studentModel
var studentModel = mongoose.model("students",studentSchema );
var instance1 = new studentModel ();
instance1.name="tangyan";
instance1.age="18";
instance1.save(function(err){ //通过save方法保存
if (err) {
console.log('保存失败');
return;
}
});
查询数据
// 查
userModel.find({}, ( error, result ) => {
if ( error ) throw error
console.log ( result )
})
修改数据
userModel.find({ username: 'aaa'}, ( error, result) =>{
if (error) throw error
const _id = result[0]._id
userModel.findById(_id, ( error, doc ) => { // 修改
if (error ) throw error
console.log( doc );
doc.username = "meijuna";
doc.save ( (error) => {
throw error
console.log("数据修改成功")
})
})
})
删除数据
userModel.find({ username: 'aaa'}, ( error, result) =>{
if (error) throw error
const _id = result[0]._id
userModel.findById(_id, ( error, doc ) => { // 删除
if (error ) throw error
doc.remove( (error) => {
if (error) throw error
console.log('数据删除成功!')
})
})
})
注册
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
mongoose.connect('mongodb://127.0.0.1:27017/meijuna', (error) => {
if (error) {
throw error
} else {
console.log('database is connected !!!')
}
})
const userSchema = new Schema({ //定义数据模型
username: String,
password: String
})
const userModel = mongoose.model('users', userSchema) //模型创建
const user = new userModel(); //创建实体
router.get('/', (req, res, next) => {
const { username, password } = req.query;
console.log(username,password);
userModel.find({}, (error, result) => {
var flag = result.some((item) => {
return item.username === username
})
if (flag) { //用户名存在
res.render('register', {
data: JSON.stringify({
ret: true, //身份验证 权限验证
status: 2 //0 表示失败 1:成功 2:
})
})
} else {
user.username = username;
user.password = password;
user.save();
res.render('register', {
data: JSON.stringify({
ret : true,
status: 1
})
})
}
})
})