Tìm hiểu về Mongoose Schema

Phùng Hùng

Phùng Hùng

Teacher and Programmer

Định nghĩa một Schema

Schema giúp định nghĩa "shape" của các document trong một collection. Mỗi collection sẽ có một schema tương ứng.

Để tạo một schema, sử dụng class mongoose.Schema:

const mongoose = require('mongoose');
const blogSchema = new mongoose.Schema({
title: String, // viết tắt của `{type: String}`
author: String,
body: String,
// mảng các embed document có
// hai trường `body` và `date`
comments: [
{
body: String,
date: Date
}
],
// Kiểu Date và khai báo giá trị
// mặc định là ngày giờ tạo document
data: {
type: Date,
default: Date.now
}
hidden: Boolean,
// nested document
// truy cập qua
// meta.votes và meta.favs
meta: {
votes: Number,
favs: Number
}
});

Các kiểu dữ liệu

SchemaType là gì?

SchemaType là đối tượng giúp câú hình một thuộc tính trong Mongoose Schema. type là một thuộc tính đặc biệt trong các scheme, khi Mongoose thấy type nó coi rằng bạn đang định nghĩa một SchemaType cho thuộc tính:

const schema = new mongoose.Schema({
name: { type: String },
nested: {
firstName: { type: String },
lastName: { type: String },
},
});

Các kiểu dữ liệu cơ bản

Ta sử dụng SchemaType để khai báo kiểu dữ liệu một trường trong schema cùng nhiều tùy chọn khác:

const schema = mongoose.Schema({
name: String, // kiểu chuỗi
living: Boolean, // kiểu Boolean
update: {
type: Date, // kiểu Date
default: Date.now, // giá trị mặc định
},
age: {
type: Number, // kiểu số
min: 18, // giá trị nhỏ nhất là 18
max: 65, // giá trị lớn nhất là 65
},
array: [], // kiểu mảng, giá trị mặc định là mảng trống
ofString: [String], // mảng chứa các chuỗi
ofNumber: [Number], // mảng chứa các số
ofDate: [Date], // mảng chứa Date
ofBoolean: [Boolean], // mảng chứa giá trị boolean
ofArrays: [[]], // mảng của các mảng
objectId: Schema.Types.ObjectId,
});

Các kiểu ngoài ObjectId đều có cú pháp ngắn gọn để khai báo trong khi để khai báo một thuộc tính (còn gọi là path) có kiểu Object ta cần sử dụng mongoose.Types.ObjectId.