MongoDB

下载、安装

启动

安装好 MongoDB 的服务器,并成功启动服务器后,就可以在项目中使用 MongoDB 数据库了。
通常 MongoDB 服务器会开机自动启动,如果没有自动启动的,我们可以自己手动去开启,启动步骤如下:
鼠标右键【此电脑】-【管理】-【服务器和应用程序】-【服务】-【MongoDB Server】-【启动】
Nodejs-04 连接数据库 - 图1

数据库可视化工具-Navicat

下载

链接:https://pan.baidu.com/s/1f1FJMwqJl5dKL5ZDCSlLXA
提取码:jajg

安装

数据库

一个 MongoDB 数据库中可以新建多个数据库,通常都是一个独立的项目对应着一个数据库。
数据库与数据库之间不能互相进行访问,每一个数据库之间都是独立的。

集合

每一个数据库中又可以新建多个集合,每一个集合,都对应着一个类型的数据。针对不同类型的数据,我们就需要创建不同的集合。

操作数据库

一、下载 mongoose 插件

在项目根目录执行以下命令下载 mongoose 插件:

  1. npm i mongoose

二、连接数据库

将 express 后端项目与 MongoDB 数据库连接上。
在后端 express 项目根目录,创建一个 dao 目录,在 dao 中再创建一个 db.js

  1. // 连接项目与数据库
  2. const mongoose = require('mongoose');
  3. // 数据库的名称(数据库不用提前创建)
  4. mongoose.connect('mongodb://localhost:27017/数据库的名称', () => {
  5. console.log('数据库连接成功');
  6. })

app.js 中引入该文件,让代码运行。

  1. // 引入 npm 下载的,或者引入Node.js内置的模块
  2. var createError = require('http-errors');
  3. var express = require('express');
  4. var path = require('path');
  5. var cookieParser = require('cookie-parser');
  6. var logger = require('morgan');
  7. require('./dao/db.js');

三、配置数据集合

每当后端需要对一个新的数据集合进行操作时,都需要先对该集合进行配置。
在 dao 中创建一个 models 目录,用来存放所有数据集合的模型。

  1. dao
  2. |--- models
  3. |--- db.js

例如我们当前要处理“考试分类” types 集合,就在 models 目录中创建一个 typesModel.js文件:

  1. const { Schema, model } = require('mongoose');
  2. // 定义该集合中每一条数据的格式(这里不需要自己定义 _id)
  3. const typesSchema = new Schema({
  4. type: String,
  5. icon: String
  6. }, { versionKey: false })
  7. // 设置数据库的集合名称
  8. module.exports = model('typesModel', typesSchema, 'types');

model方法参数说明:

  • 第一个参数:自定义的数据模型名称;
  • 第二个参数:前面定义数据结构得到的 schema 变量名;
  • 第三个参数:对应的数据库当前集合的名称(集合不需要提前数据库中创建)

    四、操作数据库

    所有操作数据库的方法,都是数据模型 model 提供的。因此要操作数据库中的某一个集合,需要先引入对应的对应的数据集合配置文件,并获取到 model。
    例如我们要获取数据库中 types 集合中的所有数据,在 /routes/types.js 中引入 /dao/models/typesModel.js 文件,并接收到 typesModel:
    1. const typesModel = require('../dao/models/typesModel');
    然后在对应的函数中调用 model 的方法,操作数据库:
    1. router.get('/getTypes', async function (req, res, next) {
    2. // 获取数据
    3. const data = await typesModel.find();
    4. // 将处理结果返回给前端
    5. res.send({
    6. message: '考试分类数据获取成功',
    7. code: 1,
    8. data: data
    9. });
    10. });
    由于操作数据库的方法返回的结果都是 Promise 对象,因此在接收结果时都用 async await 来接收。最后通过 res.send() 方法将结果返回给前端。

    mongoose 常用方法

    Mongoose中文文档