非关系性数据库: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
    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
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
// 删除
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 }
}
})