【mongoose】2.Schema和Model

mongoose中提供了三种数据库: - Schema - Model - Document

一般我们把Schema叫做一个约束对象,里面定义约束的规则,Model是数据库中对集合的一个映射。

我们来看一看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test')

// Schema仅仅是一个约束配置对象
let stuSchema = new mongoose.Schema({
name: String,
age: Number,
gender: {
type: String,
default: "male"
},
address: String
})

// Model代表数据库中的一个集合
// 参数一:集合名(与数据库中的集合映射)
// 参数二:Schema 约束模式对象
const StudentModel = mongoose.model('student', stuSchema); // 创建完模型集合不会自动被创建

// mongoose会自动将集合名变成复数

// 需要插入文档才会自动创建

// StudentModel.create({}, function(err) => {})
StudentModel.create({
name: "Sy",
age: 15,
address: "XJUFE"
})

mongoose.connection.once("open", function() {
console.log("数据库连接成功");
})

  1. 定义了一个约束对象stuSchema,用的是mongoose.Schema({})接口。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Schema仅仅是一个约束配置对象
    let stuSchema = new mongoose.Schema({
    name: String,
    age: Number,
    gender: {
    type: String,
    default: "male"
    },
    address: String
    })

  2. 映射到student集合,并添加了约束规则。

    1
    const StudentModel = mongoose.model('student', stuSchema); // 创建完模型集合不会自动被创建

这里需要注意,student在数据库中会自动被转为复数形式,如果是child就会被转为children,非常智能就对了。这个功能甚至有点智能地让人想笑。

  1. 默认情况数据库中可能还没有这个集合,通过模型来应用约束对象并创建一个文档可以看到这个集合。
    1
    2
    3
    4
    5
    6
    // StudentModel.create({})
    StudentModel.create({
    name: "Sy",
    age: 15,
    address: "XJUFE"
    })

这段代码来自2018年的教程,现在来看显然有点老了。因为我查询了官方文档后得知,官方现在推荐并展示的创建文档的写法是面向对象式地new一个文档,例如下方这个代码示例:

1
const student = new Student({ name: 'fluffy' });