非关系性数据库:Mongo

Mongo

介绍

  • 是一种非关系性数据库,不像MySQL那样有很多条条框框的约束,想怎么存就怎么存。
  • 什么叫数据库,集合,文档?请看下面的栗子。

举个栗子:教学

  • 前提:我想创建一个论坛,论坛里又有很多用户,所以我需要一个论坛数据库,其中还要一个用户集合(表)。
    在这里插入图片描述
  • 然后切换数据库,并查看当前数据库中的集合在这里插入图片描述
  • 我们可以通过db.集合名.find()方法查看集合中的所有文档(集合中的每条信息叫做文档)

常用操作

连接数据库

1
mongo

查看所有数据库

1
show dbs

切换数据库

1
use 数据库名称

展示数据库中的集合

1
show collections

展示集合中的所有文档

1
db.users.finds()

删除集合中的所有文档

1
2
> db.users.drop()
true

Mongoose 插件

官方定义如下:编写 MongoDB 验证,转换和业务逻辑是非常麻烦的. 所以我们发明了 Mongoose.

我个人的理解:就是类似JavaScriptjQuery 的关系。Mongoose 相当于jQuery

  • 数据库是不需要输入命令的时候建立的,它是在你插入数据的时候就给你建立

建立文档结构 Schema

  • 用户表中的用户信息不能是没有规律的吧,需要有用户名,性别,年龄等等信息,我们需要这样一个规范,用来更好的设计,储存数据库,方便以后的查阅,这就引入了文档结构 Schema
  • 类似一下的感觉
    在这里插入图片描述
  • 首先在后台中,新建一个文件夹,叫啥随便你,这个文件夹作用是:用来存储文档的格式,也就是规定了每条数据都有啥属性。
  • 这个js文件连接了数据库,并且引入了mongoose 插件
  • 记得最后要导出,导出的名字不要写成复数,也就是我上图中的 module.exports = User,因为插件会帮你转成复数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const mongoose = require("mongoose");
const dbName = "myWeibo";

mongoose.connect(`mongodb://localhost:27017/${dbName}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
});

// 设置文档结构
var Schema = mongoose.Schema;
var userSchema = new Schema({
username: String,
psw: String,
});
const User = mongoose.model("User", userSchema);
module.exports = User;

操作

添加数据

  • 需要先引入文档结构
  • 然后通过.save方法保存
1
2
3
4
5
6
7
8
9
10
// 引入用户表格式 Schema
// weiboUser 是我的文档结构的名字,你的自己看看是啥
const weiboUser = require("../module/weiboUser");
new weiboUser(需要保存的数据).save((err, ret) => {
if (err) {
// 保存失败
} else {
// 保存成功
}
});

删除数据

根据条件删除文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
weiboUser.remove(
{ username: "王先生" },
{
password: "123",
},
function (err, ret) {
if (err) {
console.log("删除失败");
} else {
console.log("删除成功");
console.log(ret);
// { n: 1, ok: 1, deletedCount: 1 }
}
}
);

查数据

  • 可以通过文档结构.find(查询的数据,回调函数(err, ret){})来查询数据,其中ret就是查询到的文档(数据)
  • 也可以查询一个findOne()
1
2
3
4
5
6
7
weiboUser.find({ username: data.username }, (err, ret) => {
if (ret === null) {
// 如果没查到
} else {
// 如果查到了
}
});

修改数据

通过id来修改数据
其中的ret返回的是修改前的数据内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 删除
weiboUser.findByIdAndUpdate(
"5effddd9630b7d430c4e79aa",
{
psw: "123",
},
function (err, ret) {
if (err) {
console.log("修改失败");
} else {
console.log("修改成功");
console.log(ret);
// 他会返回修改前的数据
// { _id: 5effddd9630b7d430c4e79aa, username: '王先生', psw: '1', __v: 0 }
}
}
);