mongodb

了解 mongodb

和 mysql 的区别
  • mysql 都是关系型数据库
    • 存储, 多表存储, 每一个表里面可以写一个信息, 和其他表关联
    • 多表联合查询
    • 多表之间可以存在联系, 可以使用 sql 语句让多张表联合在一起
  • mongodb 是非关系型数据库
    • 存储, 以集合(库 database)的形式存储
    • 集合里面都是以 json 文件的格式在存储
    • 多个表之间没有联系, 不能通过语句来产生联系(因为根本没有固定语句)
安装 mongodb 数据库
  1. 官网下载

  2. 双击安装

  3. 使用, 找到你的 mongodb 安装目录, 进去以后切换到 bin 目录

    • 在 bin 目录下使用 mongod 指令来运行
    • mongodb 安装完毕以后, 只是一个服务, 没有磁盘空间来写内容
    • 我们要自己创建一个文件夹
    • 使用指令 $ mongod --dbpath e:cyj
  4. 为了使用方便

    • 把 mongodb 配置到环境变量里面
    • 找到 mongodb 的 bin 目录
    • 把 bin 目录的绝对路径写入到 环境变量
    • 环境变量配置好以后, 你在电脑的任何一个位置打开 cmd 都可以启动 mongod
  5. 为了更方便

    • 新建文本文档
    • 写入 mongod --dbpath e:cyj
    • 把后缀改成 .bat
  • 注意: 每次你要使用 mongodb 数据库的时候, 必须要使用 mongodb 执行启动服务
安装 robo 3t 的工具
  • 是一个 mongodb 的可视化工具
  • 简洁版的可视化工具
    1. 官网下载
    • 建议你们下一个双包
    1. 双击安装
      • 一路下一步,找到一个你喜欢的位置
    2. 使用
      • 在 mongodb 服务启动的情况下
      • 直接双击打开就可以操作你本地的 mongodb 数据库

操作 mongodb 数据库

  • 使用一个第三方包叫做 mongoose
    • 专门用来操作 mongodb 数据库
    • 直接下载导入使用就可以了
mongoose 操作 mongodb 数据库
  1. 保证你的 mongodb 服务是开启的

  2. 使用 mongoose 里面的 connect 方法连接到 数据库

    • 语法: mongoose.connect(url, 回调函数)
    • url: 就是你本地 mongodb 的服务地址
    • mongodb://localhost:27017/test
    • 最后的 /test 就是你要操作的 database
      • 如果你没有这个库, 他会给你建立一个
      • 如果你有这个库, 就直接进去了
  3. 创建一个结构

    • 使用 mongoose.Schema({ 集合的配置信息 })
    • 是一个构造函数, 我们需要 new 一个实例
    • 配置哪些字段, 使用什么数据格式
    • 得到的是一个 结构实例
  4. 创建一个数据库操作模型

    • 其实就是一个对象, 用来操作数据库中指定哪一张表的
    • mongoose.model(表名, 所用的表格式)
      • 表名: 必须是一个复数形式
      • 所用的表格式: 必须是 Schema 的实例对象
    • 返回一个和表连接好的操作模型对象
    • 基本上操作数据库就是用或者返回的 模型 来操作
  5. 存储一条数据进去

    • 创建一个数据信息存储进去
    • new 操作模型().save()
    // 0. 导入 mongoose
    const mongoose = require('mongoose')
    
    // 1-2. 连接到数据库
    mongoose.connect('mongodb://localhost:27017/gp19', (err, info) => {
      if (err) return console.log(err)
      console.log('连接成功')
    })
    
    // 1-3. 创建一个结构
    const users = new mongoose.Schema({
      username: String,
      age: Number,
      gender: String
    })
    
    // 1-4. 获取表的操作模型(进入那一张表)
    const UserModel = mongoose.model('user', users)
    
    // 1-5. 存储一条信息
    new UserModel({
        username: '李思',
        age: 22,
        gender: '女'
      })
      .save()
      .then(res => {
        console.log(res)
        console.log('存储成功')
      })
      .catch(err => {
        console.log(err)
        console.log('存储失败')
      })
    
    

详细操作mongodb

  1. 解决警告问题

    • 解析 url 地址的问题
    • 需要在第二个参数进行一些配置, 以对象的形式
    • useNewUrlParser: true
    • useUnifiedTopology: true
  2. 集合可以填写的类型

    • key : 数据类型(String, Number, Boolean, Array)
    • key : { type: String, minlength: 5, maxlength: 10, … }
  3. 查询和筛选查询

    • 查询

      • 查询所有内容
      • 直接利用模型使用 find()
    • 筛选查询

      • 需要在 find 以后使用
        • or([{}, {}, {}])
        • and([{}, {}])
        • where({})
      • 还有一种筛选查询的方式
        • 直接在 find({ 筛选条件 })
      • 还有一种筛选方式
        • 纯链式编程
        • find().where(‘age’).gt(20).lt(30)
        • skip() 从哪一个索引位置获取
        • limit() 获取多少个
    • 条件书写

      • age: 20
      • age: { $gt: 20 }
      • age: { $lt: 20 }
      • age: { $gt: 20, $lt: 30 }
    • 其他查询方法

      • 直接利用模型调用
      • findbyId()
      • findByIdAndDelete()
      • findByIdAndRemove()
      • findByIdAndUpdate()
      • findOne()
      • findOneAndRemove()
      • findOneAndDelete()
      • findOneAndUpdate()
// 0. 导入 mongoose
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/gp19', { useNewUrlParser: true, useUnifiedTopology: true }, (err, info) => {
  if (err) return console.log(err)
  console.log('连接成功')
})
const users = new mongoose.Schema({
  username: String,
  age: {
    type: Number,
    min: 18,
    max: 60
  },
  gender: {
    type: String,
    // 这个位置的值必须是这个数组里面的内容
    enum: ['男', '女', '保密']
  },
  hobby: Array,
  desc: {
    type: String,
    minlength: 5,
    maxlength: 10,
    default: '我是一个管理员'
  },
  createTime: {
    type: Date,
    default: Date.now()
  }
})
const UserModel = mongoose.model('user', users)
1.基础查询, 查询表中的所有数据
UserModel
  .find({ username: '你好', age: { $gt: 20, $lt: 30 } })
  // .or([{ username: 'Jack' }, { age: 18 }])
  // .and([{ username: 'Jack' }, { age: 18 }])
  // .where({ age: { $gte: 20, $lt: 30 } })
  .then(res => {
    console.log(res)
  })
2.基础查询, 链式编程
UserModel
  .find()
  .where('age')
  .gte(18)
  .lte(20)
  .then(res => {
    console.log(res)
  })
3.基础查询, 查询多少个
UserModel
  .find()
  .where('age')
  .gte(18)
  .lte(20)
  .then(res => {
    console.log(res)
  })
其他查询方法
UserModel.findById('5f4da485530415140c1aff3a').then(res => console.log(res))

UserModel.findByIdAndDelete('5f4da485530415140c1aff3a').then(res => console.log(res))

UserModel.findByIdAndUpdate('5f4da44e233ea447b4ef9bfb', {
  username: 'hello world'
}).then(res => console.log(res))

UserModel.findOne({ age: 22 }).then(res => console.log(res))

mongoose 修改的删除的方法

  1. 删除多个

    • deleteMany({ 条件 }).then()

    • 删除多个, 只要满足条件的都会删除

    • 条件也可以写多个

      UserModel.deleteMany({
        age: 22
      }).then(res => console.log(res))
      
  2. 删除一个

    • deleteOne({ 条件 }).then()

    • 删除一个, 找到数据库中满足条件的第一个删除

    • 条件可以写多个

      UserModel.deleteOne({
        age: 24
      }).then(res => console.log(res))
      
  3. 修改多个

    • updateMany({ 条件 }, { 要修改成什么 }).then()

    • 根据条件修改多个, 只要满足条件的都修改

    • 条件可以写多个

      UserModel.updateMany({
        age: { $gte: 20, $lt: 60 }
      }, {
        // 修改的时候要遵循你创建的时候的规则
        gender: '保密'
      }).then(res => console.log(res))
      
  4. 修改一个

    • updateOne({ 条件 }, { 要修改成什么 }).then()

    • 根据条件, 把满足条件的第一个修改掉

    • 条件可以写多个

      UserModel.updateOne({ gender: '保密' }, { age: 33 }).then(res => console.log(res))
      
// 0. 导入 mongoose
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/gp19', { useNewUrlParser: true, useUnifiedTopology: true }, (err, info) => {
  if (err) return console.log(err)
  console.log('连接成功')
})
const users = new mongoose.Schema({
  username: String,
  age: {
    type: Number,
    min: 18,
    max: 60
  },
  gender: {
    type: String,
    // 这个位置的值必须是这个数组里面的内容
    enum: ['男', '女', '保密']
  },
  hobby: Array,
  desc: {
    type: String,
    minlength: 5,
    maxlength: 10,
    default: '我是一个管理员'
  },
  createTime: {
    type: Date,
    default: Date.now()
  }
})

// 建立模型的时候, 根据结构建立模型, 如果有这个表, 那么就不再建立表
const UserModel = mongoose.model('user', users)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值