关系型和非关系型数据库

关系型数据库

表就是关系,或者说表与表之间存在关系

  • 所有的关系型数据库都需要通过sql语言来操作
  • 所有的关系型数据库在操作之前都需要设计表结构
  • 而且数据表还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空

非关系型数据库

  • 非关系型数据库非常的灵活
  • 有的关系型数据库就是key-value对
  • 但MongDB是长得最像关系型数据库的非关系型数据库
    • 数据库 -》 数据库
    • 数据表 -》 集合(数组)
    • 表记录 -》文档对象

一个数据库中可以有多个数据库,一个数据库中可以有多个集合(数组),一个集合中可以有多个文档(表记录)

1
2
3
4
5
6
7
8
//也就是说你可以任意的往里面存数据,没有结构性这么一说
{
qq(数据库):{
user(集合):[
{(文档)},{},{}...
]
}
}

安装

下载

🔺环境配置(安装)

node使用(npm)

1
npm i mongoose

检测环境

控制台输入mongod --version

启动和关闭数据库

启动数据库服务

1
mongod --dbpath D:\mongodb\data\db

关闭服务

1
2
1.在开启服务的控制台,直接Ctrl+C;
2.直接关闭开启服务的控制台。

启动数据库,连接本地MongoDB服务

1
mongo

退出

1
exit

基本命令

  • show dbs

    查看数据库列表(数据库中的所有数据库)

  • db

    查看当前连接的数据库

  • use 数据库名称

    切换到指定的数据库(没有会新建)

  • show collections

    查看当前目录下的数据表

  • db.表名.find()

    查看表中信息

  • InsertOne()

    插入数据(对象形式,命名字符串加双引号)

  • dropDatabase()

    删除数据库

🔺Node中操作MongoDB

mongoose初识

1
2
3
4
5
6
7
8
9
10
//引包
const mongoose = require('mongoose');
//创建数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
//定义集合
const Cat = mongoose.model('Cat', { name: String });
//添加数据
const kitty = new Cat({ name: 'Zildjian' });
//保存成功提示(ES6)
kitty.save().then(() => console.log('meow'));

设计文档结构(表结构)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//引用架构对象
var Schema = mongoose.Schema
//设计集合结构以及约束
var catSchema = new Schema({
name: {
type: String,
required: true //约束:必须给值
},
age: {
type: Number,
required: true
}
});
//创建集合并引用集合结构以及添加约束
const Cat = mongoose.model('Cat', catSchema);

数据添加(增)

1
2
3
4
5
6
//添加数据
const kitty0 = new Cat({ name: 'Zild', age: 6 });
const kitty1 = new Cat({ name: 'jian', age: 7 });
//保存成功提示(ES6)
kitty0.save().then(() => console.log('meow'));
kitty1.save().then(() => console.log('meow'));

数据删除(删)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Cat.deleteOne({name:'Zild'}, function(err,ret){
if(err){
console.log('删除失败')
}else {
console.log(ret)
}
})
Cat.deleteMany({name:'Zild'},function(err,ret){
if(err){
console.log('删除失败')
}else(){
console.log(ret)
}
})
//remove方法官方不推荐使用,这里不考虑

数据更改(改)

  • 根据且只能根据id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Cat.where({ _id: "5ec9c7012909a22e7c89b5ac" }).update({ name: 'Zild', age: 8 }, function(err, ret) {
if (err) {
console.log('更新失败')
} else {
console.log(ret)
}
})

Cat.findByIdAndUpdate({ _id: "5ec9c7012909a22e7c89b5ac" }, { name: 'Zild', age: 9 }, function(err, ret) {
if (err) {
console.log("查询失败")
} else {
console.log(ret) //返回修改前的数据
}
})
  • 根据文档(记录)
1
2
3
4
5
6
7
Cat.findOneAndUpdate({ name: 'Zild' }, { name: 'Zild1', age: 9 }, function(err, ret) {
if (err) {
console.log("查询失败")
} else {
console.log(ret) //返回修改前的数据
}
})

数据查询(查)

查询全部

1
2
3
4
5
6
7
Cat.find(function(err, ret) {
if (err) {
console.log("查询失败")
} else {
console.log(ret)
}
})

查询指定属性的全部对象

1
2
3
4
5
6
7
Cat.find({ name: 'Zild' }, function(err, ret) {
if (err) {
console.log("查询失败")
} else {
console.log(ret)
}
})

查询指定属性的单个对象

1
2
3
4
5
6
7
Cat.findOne({ name: 'Zild' }, function(err, ret) {
if (err) {
console.log("查询失败")
} else {
console.log(ret)
}
})