一、MongoDB
相信大家最先学习的数据库应该是mysql这类关系型的数据库,那既然有了这么成熟的数据库了,我们为什么还要使用新的数据库呢?是因为Mysql在处理海量数据的时候效率会显著的变慢,所以就诞生了mongoDB这类的nosql数据库了。
下面我们先来了解一下什么是mongodb

1、mongodb数据存储格式
mongodb
使用json格式来存储记录,也就是说一条记录就是一个json,而存贮在mongodb是
以BSON形式来存放。
也就是说,数据记录的格式是json,数据存放格式是BSON。
BSON就是json的二进制编码存储格式。
2、分布式和集群的区别
分布式就是多台机器分别做不同的工作,每台机器负责特定的工作。集群就是多台机器做着一样的工作。

3、mongodb的增删查改
(1)对数据库层级的操作
-
在客户端指定数据库进行连接
use test (test为数据库名,当没有这个数据库的时候,会自动创建这个数据库,但是如果没有给这个数据库创建集合,就会自动删除这个数据库)

-
查看当前数据库版本 db.version()

-
显示当前数据库 db

-
显示数据库当前状态 db.stats()

-
查看当前数据库连接的主机db.getMongo()

-
删除数据库 db.dropDatabase()

(2)对集合层级的操作
-
创建集合 db.createCollection(“name”)
-
查看当前数据库下所有的集合 show collections\db.getCollectionNames()

-
查看集合里面的内容 db.collectionName.find()
-
查看第一条记录findOne()
-
查询指定条件的记录find({uid:1000})
-
查询总的记录数count()
-
查询去掉当前集合中某列的重复数


-
插入内容 db.collection.inser(data)

可以看到,mongodb会自动创建一个_id作为主键。
-
重命名集合 db.collection.renameCollection(’newname')
-
删除集合 db.collection.drop()
-
删除集合中的记录数remove({})//记得里面有个大括号

因为我们在服务器中读取数据库,为了安全,我们要对数据库的访问加以限制。
现在我们的目的是,创建一个用户,这个用户是给服务器来操控我们数据库。
下面来一起操作
首先先进入到amin
use admin

然后创建一个用户
db.createUser({})
Role用于指定权限,db指定哪个数据库

db.createUser({user:"krys",pwd:"kryspwd",roles:[{role:"dbAdmin",db:"device"}]})
那怎么在node中使用mongodb呢,这里需要用到一个插件就是mongoose。那我们先来学习一下mongoose。

-
Schema 模式对象,这个对象定义 约束数据库中的文档结构
-
model 是集合中的所有文档,相当于mongodb中的collection(表)
-
document 表示集合中的具体文档,相当于row 一行记录
-
schema生成model,model生成document
下面我们来写一下用户表,然后来写一个注册登录的功能。
所以我们先定一个mongoose.js,这个文件用来连接数据库
const mongoose = require('mongoose')
const DB_URL = 'mongodb://user:password@127.0.0.1:27017/iot?authSource=admin'
mongoose.connect(DB_URL)
mongoose.connection.on('connected',function() {
console.log('Mongoose connection open to '+DB_URL);
});
/**
* 连接异常 error 数据库连接错误
*/
mongoose.connection.on('error',function(err) {
console.log('Mongoose connection error: '+ err);
});
/**
* 连接断开 disconnected 连接异常断开
*/
mongoose.connection.on('disconnected',function() {
console.log('Mongoose connection disconnected');
});
module.exports = mongoose
然后在项目根目录下面,创建一个models文件夹,并创建一个user.js.
好了,抛开mongoose。我们先来定义一下用户需要哪些字段。用户唯一识别id,用户昵称nickname,用户登录的账号username,用户性别sex,用户密码password。
在mongoose中,一切始于schema。每一个schema都会映射到一个mongodb collection。
那我们先创建一个schema
var mongoose = require('../db/mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
uid:String,//用户id 唯一
nickname:String,//用户昵称
sex:Number,//用户性别
username:String,//用户登录的账号
password:String,//用户密码
})
如果后续要加key,使用add方法来添加。此外,支持的类型有如下几种
* String
* Number
* Date
* Buffer
* Boolean
* Mixed
* ObjectId
* Array
有了schema 接下来我们要将这个schema转换为一个model
var User = mongoose.model('User',userSchema);
然后把这个User给export出来
var mongoose = require('../db/mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
uid:String,//用户id 唯一
nickname:String,//用户昵称
sex:Number,//用户性别
username:String,//用户登录的账号
password:String,//用户密码
});
var User = mongoose.model('User',userSchema);
module.exports = User
接下来我们在api中创建处理用户登录的方法
exports.login = async (req, res) => {
const { username,password } = req.query;
User.findOneAsync({ //查询数据库是否有该用户
username:username,
}).then(result => {
if (result) {
if(result.password == password){
//密码正确
result.password = '';
res.json({
code: 200,
message: '获取成功',
data: result
});
}else{
res.json({
code: 301,
message: '密码错误',
});
};
} else {
//注册一个账号,
let createD = moment().format('YYYY-MM-DD HH:mm:ss');
let updateD = moment().format('YYYY-MM-DD HH:mm:ss')
User.create({
username:username,
nickname:'新用户',//用户昵称
sex:0,//用户性别
password:password,//用户密码
creat_date: createD,
update_date: updateD,
}).then(result => {
result.password = '';
res.json({
code: 200,
message: '获取成功',
data: result
});
});
};
})
.catch(err => {
})
}