更新数据库配置
在我们开始之前,让我们更新数据库配置以使用环境变量。
我们将在文件中定义 5 个环境变量:.env
# App Configurations
PORT=3000
BASE_URL=localhost
DEBUG=true
APP_NAME="My App"
# Database Configurations
DB_HOST=localhost
DB_PORT=27017
DB_NAME=root
DB_USERNAME=root
DB_PASSWORD=ninjaNode
现在让我们更新文件以使用这些环境变量:database.ts
// src/config/database.ts
import { env } from 'dotenv';
const databaseConfigurations = {
host: env('DB_HOST', 'localhost'),
port: env('DB_PORT', 27017),
name: env('DB_NAME'),
username: env('DB_USERNAME'),
password: env('DB_PASSWORD'),
};
export default databaseConfigurations;
现在我们开始了。
数据库模型简介
让我们从定义什么是数据库模型开始。
数据库模型是代码中数据库表(集合)的表示形式。它是一个定义表的结构和列的数据类型的类。
它还用于对数据库集合进行操作,例如创建、读取、更新和删除记录。
模型结构
模型结构将从简单结构开始到更复杂的结构。
它将以集合名称开头,因此我们需要定义一个名为的静态属性,该属性将保存集合的名称。collectionName
模型名称将是集合名称的单数形式,集合名称将始终是形式。plural
camelCase
因此,如果我们有以下集合:
- 用户集合:集合名称将为,型号名称将为 。
users
User
- 用户组集合:集合名称将为,模型名称将为 。
usersGroups
UsersGroup
为什么我们要以单一形式命名模型?因为我们将使用模型来管理单个文档(记录/行),所以它将作为单个实体进行交互。
模型集合
该模型将具有从集合中获取多个文档的操作,在内部我们将循环访问这些文档并为每个文档创建模型(实体)的新实例。
克鲁德操作
在数据库世界中有一个常用术语称为 ,它代表创建、读取、更新和删除。CRUD
这些是我们将对数据库执行的基本操作,没有它们,任何模型都不会完整。
自定义操作
我们还将向模型添加一些自定义操作,这些操作将特定于模型,并将用于执行一些特定任务,例如截断集合、获取文档计数等。
唯一 ID 和自动递增 ID
默认情况下,MongoDB会生成一个名为的列,该列是每个文档的唯一ID,它是一个ObjectId 12字节值,包括:_id
一个 4 字节的时间戳,表示 ObjectId 的创建,以自 Unix 纪元以来的秒为单位。
每个进程生成一次的 5 字节随机值。此随机值对于机器和过程是唯一的。
A 3-byte incrementing counter, initialized to a random value.
But we'll also create another column called that it will be an auto incremented integer, which means that the first created document will have the value and the second one will have the value , and so on.id
1
2
Later, we'll add some other cool features like defining the initial value of the model ID, and the increment stepper.
This is actually asked by many clients specially in the collection where they want to start the order number from a high number and increment it by higher numbers for each newly created order.orders
Model Relationships
我们还将向模型添加一些关系,这些关系将用于从其他集合中获取相关文档。
关系的类型
有 3 种类型的关系:
- 一对一:集合中的文档与另一个集合中的单个文档有关系。
- 一对多:集合中的文档与另一个集合中的多个文档有关系。
- 多对多:集合中的多个文档与另一个集合中的多个文档有关系。
这些关系在数据库世界中也称为。associations
但我们实际上要处理的是以下内容:
将一个文档嵌入(注入)到另一个文档中。
例如,当我们创建一个新帖子时,我们将在帖子中添加列,这将包含创建帖子的用户的数据,该用户文档数据将存储在 ITO 中。createdBy
这称为嵌入,这是MongoDB中非常常见的做法。
另一种方法是将多个文档注入另一个文档,例如,当我们创建一个新帖子时,我们将在帖子中添加列,这将包含数组中与帖子相关的评论数据。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/292572.html