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
      })
    })
})
相关推荐
深盾科技_Virbox18 分钟前
软件授权工具静默安装实践
java·运维·数据库·安全·软件需求
延凡科技1 小时前
延凡科技综合监控预警处置平台—— 一体化视频AI安防闭环系统设计与功能实现[特殊字符]️
数据库·人工智能·科技·安全·能源
老马聊技术1 小时前
Rocky Linux 9.0 安装 MySQL8.x详细教程
linux·数据库
醇氧1 小时前
主流 Agent 开发框架全解析(2026 最新)
大数据·数据库·人工智能·开源
吴声子夜歌1 小时前
Redis 6.x——整合SpringBoot
数据库·spring boot·redis
ATA88881 小时前
AI辅助生成SQL实战从连接配置到执行计划优化的完整技术流程
数据库·人工智能·智能问数
咏方舟【长江支流】1 小时前
【开源】跨语言·跨平台·跨数据库(4) ——用宝框架 ORM 数据源适配器
数据库·开源·ai编程·orm·咏方舟-长江支流·用宝框架·用宝框架orm
JZC_xiaozhong2 小时前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
渣渣灰飞2 小时前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范
数据库·学习·mysql
IvorySQL2 小时前
PG 日报|新增 VFD 缓存监控视图,精细化数据库调优
大数据·数据库·人工智能·缓存·postgresql·区块链