Mongodb数据库的基本使用

Mongodb数据库的基本概念

  • 可以有多个数据库
  • 一个数据库中可以有多个集合(表)
  • 一个集合中可以有多个文档(表记录)
  • 文档结构灵活,没有任何限制
  • Mongodb非常灵活,不需要像 MySQL 一样先创建数据库、表、设计表结构
    • 这里只需要:当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了
    • 一切都有Mongodb 来帮你自动完成建库建表这些事儿
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      {
      qq:{ // 集合
      user:[
      {name:'张三'}, // 文档
      {},
      {},
      {},
      {}
      ]
      products:[
      {},
      {}
      ]
      },
      taobao:{

      },
      ....
      }

      1.启动和关闭数据库

      1.1启动

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

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

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

1.2 关闭

1
2
3
# 在开始服务的控制台(cmd) 直接 Ctrl+c 即可停止退出,
# 或者直接关闭 开启服务的控制台

2.连接和退出数据库

2.1 连接

1
2
3
# 在 数据库 bin 的目录下 开启cmd
# 该命令默认连接本机的 mongodb 服务
mongo

2.2 退出

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

2.3基本命令

  • show dbs
    • 查看显示所有数据库
  • show collections
    • 显示当前所有集合
  • db
    • 查看当前操作的数据库
  • use 数据库名称
    • 切换到指定的数据库(如果没有会新建)
  • 插入数据

3.在Nodejs中如何操作使用Mongodb数据

3.1 使用官方的 mongodb 包来操作

  • 不推荐使用, 太原生了

  • npm mongodb包 下载及指导地址

    3.2 使用第三方包 mongoose 来操作 Mongodb 数据库

    1
    npm i mongoose
  • 第三方包 : mongoose 基于 MongoDB 官方的 mongodb 包再一次做了封装

  • mongoose 网址

    3.3 简单体验 hello world

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    const mongoose = require('mongoose');
    // 连接 MongoDB数据库
    // mongodb://localhost:27017/test 以下创建的数据库数据都在 这个 test里
    mongoose.connect('mongodb://localhost:27017/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true
    });

    // 创建了一个模型 就是在设计数据库
    // MongoDB 是动态的,非常灵活。只需要在代码中设计你的数据库就可以了
    // mongoose 这个包就可以让你的设计编写过程变得非常简单
    const Cat = mongoose.model('Cat', {
    name: String
    });

    // 实例化了一个 Cat
    const kitty = new Cat({
    name: 'Zildjian'
    });

    // 持久化保存了 kitty 实例
    kitty.save().then(() => console.log('meow'));

    3.4 创建数据库 并创建架构

    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
     var mongoose = require('mongoose');

    // 1.连接数据库
    mongoose.connect('mongodb://localhost:27017/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true
    });
    // 架构
    var Schema = mongoose.Schema;

    // 2.设计文档结构/架构(表结构)
    // 字段名称就是表结构中的属性名称
    // 约束的目的是为了保证数据的完整性, 不要有脏数据
    var userSchema = new Schema({
    userName: {
    type: String,
    required: true // 这个意思是 该属性不能为空 必须有
    },
    password: {
    type: String,
    required: true
    },
    email: {
    type: String
    }
    });

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

    // 4. 当我们有了模型构造函数之后 , 就可以用这个构造函数 对 users 集合中的数据进行 增删改查(CURD)

    新增数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     //  新增数据
    let admin = new User({
    userName: 'admin',
    password: '123456',
    email: 'admin@qq.com'
    })
    admin.save((err, ret) => {
    if (err) {
    console.log('存储失败');
    } else {
    console.log('存储成功');
    console.log(ret); // ret 就是 存储的数据
    }
    })
    // 下面的就是 ret
    // {
    // _id: 5f32a2c76be62230a099314b,
    // userName: 'admin',
    // password: '123456',
    // email: 'admin@qq.com',
    // __v: 0
    // }

    查询数据

    查询所有数据 find
    1
    2
    3
    4
    5
    6
    7
     User.find((err, ret) => {
    if (err) {
    console.log('查询失败');
    } else {
    console.log(ret);
    }
    })
    按条件查询所有符合的数据 find
    1
    2
    3
    4
    5
    6
    7
    8
    9
    User.find({
    userName: '朱元璋'
    }, (err, ret) => {
    if (err) {
    console.log('查询失败');
    } else {
    console.log(ret);
    }
    })
    按条件查询单个的数据 (如果有相同的返回第一个) findOne
    1
    2
    3
    4
    5
    6
    7
    8
    9
     User.findOne({
    userName: '朱元璋'
    }, (err, ret) => {
    if (err) {
    console.log('查询失败');
    } else {
    console.log(ret);
    }
    })

    删除数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     // 3.删除数据
    User.remove({
    userName: '朱元璋'
    }, (err, ret) => {
    if (err) {
    console.log('删除失败');
    } else {
    console.log(ret);
    }

    })

    更新数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 4.更新数据
    // 第一个参数 需要更新的 第二个参数 更新什么
    User.update({
    userName: '朱元璋'
    }, {
    password: '123456'
    }, (err, ret) => {
    if (err) {
    console.log('更新失败');
    } else {
    console.log(ret);
    }
    })