Mongoose 入门,从一个 demo 开始

711 阅读2分钟

Mongoose(mongoosejs.com) 是 Node.js 环境下对 MongoDB 进行便捷操作的对象模型工具,它将用到的数据表示为 JavaScript 对象,然后将它们映射到底层数据库,开发人员不必转换自己的思维方式,可以沿用 JavaScript 对象的思维去访问数据库中的数据。

之前的文章中介绍了如何在mac上安装MongoDB,使用Mongoose之前要确保MongoDB和Node.js已安装成功。本文从一个 demo 快速开始介绍Mongoose,之后的文章将单独介绍它的核心概念,比如:连接数据库,Schemas、Models、验证器和中间件等。

这个demo要实现的功能是往 school 数据库的 teacher 集合中新增一条数据,然后查询出 6 年级所有的老师,并且将他们的工资在原来的基础上加1000元。

连接数据库

连接在本地主机 27017 端口运行的MongoDB实例,代码如下:

import mongoose from 'mongoose'

async function connect() {
    await mongoose.connect('mongodb://localhost:27017/school')
}

connect().catch((err) => {
    console.log('连接失败',err)
})

如果不存在名为 school 的数据库,那么该数据库将自动创建。

创建 Schema

Schema 最终映射到 MongoDB 的集合上,它定义了集合中每个 document 的形状。示例代码如下:

const teacherSchema = new mongoose.Schema({
    name: String,
    grade: Number,
    salary: Number
});

teacherSchema 用于描述 teacher 集合中每条数据的形状,默认情况下,Mongoose 会给 Schema 添加一个 _id 属性,它是 document 的唯一标识符。

创建 Model

Model 是一个类,它是 Document 的子类,Model 实例是 Mongoose 的 document,Mongoose 的 document 与 MongoDB 存储的 document 对应。创建 Model 的示例代码如下:

const Teacher = mongoose.model('teacher', teacherSchema);

如果数据库中不存在一个名为 teachers 的集合,那么 teachers 集合将自动创建,如果需要自定义集合的名称,可在 mongoose.model 方法的第三个参数中指定集合的名称。

实例化 Model

使用上一步创建的Model实例化一个具体的document。

const heyu = new Teacher({
    name: 'heyu',
    grade: 6,
    salary: '1000'
})

将 Mongoose 的 document 保存到数据库

调用 document 自带的save方法将它保存到数据库中,代码如下:

await heyu.save();

查询符合条件的 documents

Teacher.find({ grade: 6 }, (err: mongoose.CallbackError, result: ITeacher) => {
    console.log(result)
});

更新 documents

将6年级所有老师的工资在原来的基础上加1000。

Teacher.updateMany({ grade: 6 }, {$inc: {salary: 1000}}).exec()

updateMany 方法的第二个参数可以使用 MongoDB 支持的更新操作符,MongoDB 增删改查操作 一文中罗列了 MongoDB 全部的更新操作符。

推荐阅读

  1. 在 macOS 上安装 MongoDB
  2. MongoDB 增删改查操作