MongDB知识梳理

  1. 1. 关系型和非关系型数据库
    1. 1.1. 关系型数据库
    2. 1.2. 非关系型数据库
  2. 2. 安装
  3. 3. 启动和关闭数据库
  4. 4. 连接数据库
  5. 5. 基本命令
    1. 5.1. 添加数据(增)
    2. 5.2. 删除(删)
    3. 5.3. 更新(改)
    4. 5.4. 查询(查)

关系型和非关系型数据库

关系型数据库

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

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

非关系型数据库

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

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

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

安装

启动和关闭数据库

启动:

1
2
3
# mongodb 默认使用执行mongod 命令所处盼复根目录下的/data/db作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动新建一个 /data/db
mongod

如果想要修改默认的数据存储目录,可以:

1
mongod --dbpath = 数据存储目录路径

停止:

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

连接数据库

连接:

1
2
# 该命令默认连接本机的 MongoDB 服务
mongo

退出:

1
2
# 在连接状态输入 exit 退出连接
exit

基本命令

  • show dbs
    查看数据库列表(数据库中的所有数据库)
    
    1
    2
    3
    4

    - ```
    db
    查看当前连接的数据库
  • use 数据库名称
    切换到指定的数据库,(如果没有会新建)
    
    1
    2
    3
    4

    - ```
    show collections
    查看当前目录下的所有数据表
  • ```
    db.表名.find()
    查看表中的详细信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55

    # 在Node中如何操作MongoDB数据库

    ## 使用官方的`MongoDB`包来操作

    > http://mongodb.github.io/node-mongodb-native/

    ## 使用第三方包`mongoose`来操作MongoDB数据库

    第三方包:`mongoose`基于MongoDB官方的`mongodb`包再一次做了封装,名字叫`mongoose`,是WordPress项目团队开发的。

    > https://mongoosejs.com/

    ## 学习指南(步骤)

    官方学习文档:https://mongoosejs.com/docs/index.html

    # 设计Scheme 发布Model (创建表)

    ```javascript
    // 1.引包
    // 注意:按照后才能require使用
    var mongoose = require('mongoose');

    // 拿到schema图表
    var Schema = mongoose.Schema;

    // 2.连接数据库
    // 指定连接数据库后不需要存在,当你插入第一条数据库后会自动创建数据库
    mongoose.connect('mongodb://localhost/test');

    // 3.设计集合结构(表结构)
    // 用户表
    var userSchema = new Schema({
    username: { //姓名
    type: String,
    require: true //添加约束,保证数据的完整性,让数据按规矩统一
    },
    password: {
    type: String,
    require: true
    },
    email: {
    type: String
    }
    });

    // 4.将文档结构发布为模型
    // mongoose.model方法就是用来将一个架构发布为 model
    // 第一个参数:传入一个大写名词单数字符串用来表示你的数据库的名称
    // mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
    // 例如 这里会变成users集合名称
    // 第二个参数:架构
    // 返回值:模型构造函数
    var User = mongoose.model('User', userSchema);

添加数据(增)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 5.通过模型构造函数对User中的数据进行操作
var user = new User({
username: 'admin',
password: '123456',
email: 'xiaochen@qq.com'
});

user.save(function(err, ret) {
if (err) {
console.log('保存失败');
} else {
console.log('保存成功');
console.log(ret);
}
});

删除(删)

根据条件删除所有:

1
2
3
4
5
6
7
8
9
10
User.remove({
username: 'xiaoxiao'
}, function(err, ret) {
if (err) {
console.log('删除失败');
} else {
console.log('删除成功');
console.log(ret);
}
});

根据条件删除一个:

1
Model.findOneAndRemove(conditions,[options],[callback]);

根据id删除一个:

1
User.findByIdAndRemove(id,[options],[callback]);

更新(改)

更新所有:

1
User.remove(conditions,doc,[options],[callback]);

根据指定条件更新一个:

1
User.FindOneAndUpdate([conditions],[update],[options],[callback]);

根据id更新一个:

1
2
3
4
5
6
7
8
9
10
// 更新	根据id来修改表数据
User.findByIdAndUpdate('5e6c5264fada77438c45dfcd', {
username: 'junjun'
}, function(err, ret) {
if (err) {
console.log('更新失败');
} else {
console.log('更新成功');
}
});

查询(查)

查询所有:

1
2
3
4
5
6
7
8
// 查询所有
User.find(function(err,ret){
if(err){
console.log('查询失败');
}else{
console.log(ret);
}
});

条件查询所有:

1
2
3
4
5
6
7
8
// 根据条件查询
User.find({ username:'xiaoxiao' },function(err,ret){
if(err){
console.log('查询失败');
}else{
console.log(ret);
}
});

条件查询单个:

1
2
3
4
5
6
7
8
9
10
11
// 按照条件查询单个,查询出来的数据是一个对象({})
// 没有条件查询使用findOne方法,查询的是表中的第一条数据
User.findOne({
username: 'xiaoxiao'
}, function(err, ret) {
if (err) {
console.log('查询失败');
} else {
console.log(ret);
}
});