MongoDB数据库

数据库

分类:

  • 关系型数据库:mysql、SqlServer、db2、oracle
  • 非关系型数据库:MongoDB、Redis

一、MongoDB 基础

  个人推荐使用绿色免安装版(默认端口号:27017)。关于环境变量就暂时不用配置了,直接在 MongoDB 数据库的 bin 目录打开终端操作即可。

① 启动服务端(mongod.exe):

准备工作:

  • 在任意目录下创建 data 文件夹,内含两个文件夹 db 和 log ,其中 log 文件创建一个 mongodb.log 文件

  • 根目录新建 mongod.conf

ini 复制代码
dbpath = D:\install_pack\mongodb\data\db
logpath = D:\install_pack\mongodb\data\log\mongodb.log
logappend = true
port = 27017

正式启动:

sh 复制代码
.\mongod.exe --config=D:\install_pack\mongodb\mongod.conf

.\mongod.exe

② 启动客户端(mongo.exe):

sh 复制代码
.\mongo.exe #(默认直接连接,无需身份验证)

③ 可视化客户端

  • Robo 3T (Robomong)

1、数据库、聚集集合操作

sh 复制代码
# 展示所有数据库
show dbs
# 展示当前数据库
db

# 创建/切换数据库
use <数据库名>
# 删除数据库
db.dropDatabase()
sh 复制代码
# 展示所有集合
db.getCollectionNames()

# 创建集合
db.createCollection('<集合名>')
# 删除集合
db.<集合名>.drop()

2、数据的增、删、改

sh 复制代码
# 查询当前🚩集合的所有记录
db.<集合名>.find()
sh 复制代码
# 增
db.<集合名>.save([{username:'zhangsan',password:123},{username:'lisi',password:456}])

# 删除指定记录
db.<集合名>.remove({username:'lisi'})
# 删除所有记录
db.<集合名>.remove({})

# 改
db.<集合名>.update({username:'lisi'},{username:'lisi_pro',password:888})
db.<集合名>.update({username:'lisi'},{$set:{password:666}})

3、数据的查

sh 复制代码
# 查询当前🚩集合的所有记录
db.<集合名>.find()
sh 复制代码
# 1、指定范围
db.<集合名>.find({ag:22 })
db.<集合名>.find({age:{$gt:22} })
db.<集合名>.find({age:{$gte:22} })  >=
db.<集合名>.find({age:{$lt:22} })
db.<集合名>.find({age:{$lte:22} })  <=

db.<集合名>.find({age:{$gt:22, $lt:35} })

# 2、指定内容
# and
db.<集合名>.find({username:'lencamo', age:23})
# or
db.<集合名>.find($or:[{username:'lencamo', age:23}])

# 3、其他
db.<集合名>.find().limit(5)
db.<集合名>.find().skip(5)

db.<集合名>.find().count()

二、MongoDB 与 Node.js

1、安装

sh 复制代码
npm i mongoose

2、连接 MongoDB

  • 新建 config / db.config.js
js 复制代码
const mongoose = require('mongoose')

// 建立MongoDB连接(当插入数据时,它会自动✨创建ren_db数据库)
mongoose.connect('mongodb://127.0.0.1:27017/ren_db')
  • bin / www
js 复制代码
// 引入数据库模块
require('../config/db.config.js')

3、创建 MongoDB 模型

一个模型(user)对应 MongoDB 数据库中的一个集合(users)
使用:user.create、user.find、user.delete、user.update

  • 新建 model / userModel.js
js 复制代码
const mongoose = require('mongoose')

// 准备
const Schema = mongoose.Schema
const UserType = {
  username: String,
  password: String,
  age: Number
  phone: String,
}

// 执行到user模型时,它会自动对应✨、创建users集合
const userModel = mongoose.model('user', new Schema(UserType))

module.exports = UserModel

三、调用 MongoDB 模型

1、示例

  • app.js
js 复制代码
const usersRouter = require('./router/usersRouter')

app.use('/api', usersRouter)
  • router / usersRouter.js
js 复制代码
// 导入user模型(这样就可以🚩使用user.create | user.find | user.delete | user.update来操作数据了)
const UserModel = require('../model/UserModel')

router.post('/user/add', (req, res) => {
  console.log(req.body)

  // 直接操作数据库  ✖(复杂)
  // db.users.【......】

  // 通过user模型 ✔
  // UserModel.【......】
})
  • index.ejs
html 复制代码
<body>
  <div>
    <div>用户名:<input id="username" /></div>
    <div>密码:<input type="password" id="password" /></div>
    <div>年龄:<input type="number" id="age" /></div>
    <div>手机号:<input id="phone" /></div>
  </div>
  <div>
    <button id="register">注册</button>
    <button id="delectable">删除</button>
    <button id="update">更新</button>
    <button id="checkup">查询</button>
  </div>

  <br />

  <tbody>
    <thead>
      <tr>
        <td>id值</td>
        <td>用户名</td>
        <td>手机号</td>
      </tr>
      <!-- 数据区域 -->
    </thead>
  </tbody>
</body>

2、增

  • 前端
html 复制代码
<script>
  // 1、注册(增)
  register.onclick = () => {
    fetch('api/user/add', {
      method: 'POST',
      body: JSON.stringify({
        username: username.value,
        password: password.value,
        age: age.value,
        phone: phone.value
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    })
      .then((res) => res.json())
      .then((res) => {
        console.log(res)
      })
  }
</script>
  • 后端
js 复制代码
router.post('/user/add', (req, res) => {
  // console.log(req.body)
  // ✨前端传来的数据(采用解构赋值:前端和后端字段命名一致)
  const { username, password, age, phone } = req.body

  UserModel.create({
    username,
    password,
    age,
    phone
  }).then((data) => {
    // 打印添加的数据
    console.log(data)

    res.send({
      ok: 1
    })
  })
})

3、删

  • 前端
html 复制代码
<script>
  // 1、注册(增)
  delectable.onclick = () => {
    fetch('api/user/delectable/4563456345632345fad1')
      .then((res) => res.json())
      .then((res) => {
        console.log(res)
      })
  }
</script>
  • 后端
js 复制代码
router.get('/user/delectable/:id', (req, res) => {
  // console.log(req.body)
  const { username, password, age, phone } = req.body

  // ✨前端传来的动态id值
  // (这里命名一定要为_id,因为MongoDB集合中默认的id字段名为_id,这样方便后面使用解构赋值)
  const _id = req.params.id

  UserModel.deleteOne({ _id }).then((data) => {
    console.log(data)

    res.send({
      ok: 1
    })
  })
})

4、改

  • 前端
html 复制代码
<script>
  update.onclick = () => {
    fetch('api/user/update/4563456345632345fad1', {
      method: 'POST',
      body: JSON.stringify({
        username: 'lencamo',
        password: '123456',
        age: 21,
        phone: 13653688245
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    })
      .then((res) => res.json())
      .then((res) => {
        console.log(res)
      })
  }
</script>
  • 后端
js 复制代码
router.post('/user/update/:id', (req, res) => {
  console.log(req.body)
  const { username, password, age, phone } = req.body
  const _id = req.params.id

  UserModel.updateOne(
    { _id },
    {
      username,
      password,
      age,
      phone
    }
  ).then((data) => {
    console.log(data)

    res.send({
      ok: 1
    })
  })
})

5、查

① 示例 1:

  • 前端
html 复制代码
<script>
  // 获取数据(查)
  checkup.onclick = () => {
    // 1、所有数据
    fetch('api/user/list')
      .then((res) => res.json())
      .then((res) => {
        console.log(res)
        var tbody = document.querySelector('tbody')

        // map 映射
        tbody.innerHTML = res
          .map(
            (item) => `
          <tr>
            <td>${item._id}</td>
            <td>${item.username}</td>
            <td>${item.phone}</td>
          </tr>
        `
          )
          .join('')
      })
</script>
  • 后端
js 复制代码
router.post('/user/list', (req, res) => {
  console.log(req.body)

  // 按照age正序排列、并且只返回用户名和电话号码数据
  UserModel.find({}, ['username', 'phone'])
    .sort({ age: 1 })
    .then((data) => {
      console.log(data)

      res.send({
        ok: 1
      })
    })
})

② 示例 2:

  • 前端
html 复制代码
<script>
  // 获取数据(查)
  checkup.onclick = () => {
    // 2、条件数据
    fetch('api/user/list?page=1&limit=10')
      .then((res) => res.json())
      .then((res) => {
        console.log(res)
      })
  }
</script>
  • 后端
js 复制代码
router.post('/user/list', (req, res) => {
  console.log(req.body)

  // 获取请求🚩参数
  console.log(req.query)
  const { page, limit } = req.query

  // 按照age正序排列、并且只返回用户名和电话号码数据
  UserModel.find({}, ['username', 'phone'])
    .sort({ age: 1 })
    .skip((page - 1) * limit)
    .limit(limit)
    .then((data) => {
      console.log(data)

      res.send({
        ok: 1
      })
    })
})
相关推荐
qq_401700418 小时前
Qt QUrl 详解与代码示例
开发语言·数据库·qt
程序员阿鹏9 小时前
如何实现MySQL分库分表?
数据结构·数据库·sql·mysql·缓存
风哥2号9 小时前
数据库教程FGMT33‑MySQL主从复制项目实施与维护06(MySQL8.4/9.7 MGR组复制)
数据库·mysql
liangsheng_g9 小时前
Spring事务传播行为分派与挂起恢复源码实战
数据库·sql·spring
蓝速科技10 小时前
信创终端 POC 测试实战与选型避坑指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理
风哥2号10 小时前
数据库教程FGMT29‑Linux平台MySQL5.7安装配置与管理入门
数据库
杨云龙UP10 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
这个DBA有点耶12 小时前
数据库数据同步解决方案怎么选?6款主流工具横向对比与信创选型指南
数据库·架构·dba
刃神太酷啦12 小时前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
小雷信息医学12 小时前
不会写复杂代码也能发 SCI?手把手教你用 InSpireR 交互系统一键提取、合并与导出临床科研宽表【第三章】
数据库