Sử dụng Cơ sở dữ liệu MongoDB trong Ứng dụng NestJS với Mongoose

MongoDB là cơ sở dữ liệu NoSQL không có lược đồ với cấu trúc tài liệu linh hoạt, không giống như cơ sở dữ liệu SQL. Sử dụng MongoDB làm cơ sở dữ liệu mang lại nhiều lợi ích, từ dễ dàng mở rộng quy mô đến các tính năng cơ sở dữ liệu hiện đại như giao dịch.
MongoDB cũng hỗ trợ các thư viện mô hình dữ liệu đối tượng (ODM) như Mongoose. ODM quản lý các mối quan hệ dữ liệu, xác thực lược đồ và chuyển đổi các đối tượng thành mô hình dữ liệu. Chúng giúp tương tác với cơ sở dữ liệu MongoDB dễ dàng hơn.
Trong một vài bước, bạn sẽ học cách sử dụng MongoDB trong ứng dụng NestJS với gói mongoose NestJS chuyên dụng.
Mục Lục
Bước 1: Cài đặt phụ thuộc
Trước khi sử dụng Mongoose trong ứng dụng NestJS, bạn phải cài đặt nó cùng với gói NestJS gốc của nó.
Cài đặt mongoose và gói NestJS gốc của nó bằng trình quản lý gói npm bằng cách chạy:
npm install @nestjs/mongoose mongoose
Bước 2: Kết nối với MongoDB
Khi quá trình cài đặt hoàn tất, hãy điều hướng đến app.module.ts tập tin. Sau đó nhập MongooseModule từ @ nest / mongoose:
import { MongooseModule } from '@nestjs/mongoose';
Tiếp theo, trong mảng nhập của bạn, hãy gọi forRoot phương pháp trên MongooseModule và chuyển URI MongoDB của bạn làm đối số:
imports: [MongooseModule.forRoot(process.env.MONGODB_URI)],
Các forRoot phương thức chia sẻ kết nối cơ sở dữ liệu thông qua tất cả các mô-đun trong ứng dụng của bạn. Nó có một đối tượng cấu hình tùy chọn; bạn có thể tìm hiểu thêm về nó trong tài liệu tùy chọn của Mongoose.
Bước 3: Tạo giản đồ Mongoose
Lược đồ là một đối tượng JSON xác định cấu trúc và nội dung dữ liệu của bạn. Bạn sẽ cần tạo một cái để xác định cách Mongoose lưu trữ dữ liệu của bạn trong cơ sở dữ liệu MongoDB.
Trong mô-đun gốc của ứng dụng của bạn, hãy tạo một “lược đồ” thư mục. Thư mục này là nơi bạn sẽ lưu trữ tất cả các tệp lược đồ của mình.
Bên trong của bạn lược đồ thư mục, tạo một tệp giản đồ và đặt tên cho nó bằng cách sử dụng quy ước đặt tên NestJS (
Tiếp theo, thêm các lần nhập sau vào tệp giản đồ của bạn:
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { Document } from "mongoose";
Các Ủng hộ decorator đánh dấu các thuộc tính mà nó chú thích như một thuộc tính trong cơ sở dữ liệu MongoDB của bạn.
Các Lược đồ decorator đánh dấu lớp mà nó chú thích dưới dạng một lược đồ.
Các SchemaFactory lớp chứa các phương thức tĩnh được sử dụng để tạo mô hình.
Mongoose Tài liệu đại diện cho một ánh xạ 1-1 tới các tài liệu được lưu trữ trong MongoDB. Bạn sẽ cần nó như một chú thích kiểu.
Sau đó, tạo một lớp, chú thích nó bằng Lược đồ decorator để đánh dấu nó là một giản đồ Mongoose và xuất nó:
@Schema()
export class Demo {}
Tiếp theo, tạo và xuất một loại liên hợp với lớp của bạn và Tài liệu:
export type DemoDocument = Demo & Document;
Sau đó, thêm các thuộc tính mong muốn của bạn vào lớp và chú thích chúng bằng Ủng hộ người trang trí. Bạn có thể chuyển một đối tượng cấu hình tùy chọn vào Ủng hộ trang trí và đặt thuộc tính theo yêu cầu:
@Schema()
export class Demo {
@Prop({ required: true })
property_1: string;
}
Tài liệu Mongoose trình bày chi tiết hơn về đối tượng cấu hình.
Cuối cùng, tạo và xuất mô hình Mongoose thông qua SchemaFactory‘S createForClass và chuyển lớp của bạn làm đối số:
export const DemoSchema = SchemaFactory.createForClass(Demo);
Lược đồ đã hoàn thành của bạn sẽ trông giống như sau:
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';export type DemoDocument = Demo & Document;
@Schema()
export class Demo {
@Prop({ required: true })
property_1: string;
@Prop({ required: true })
property_2: number;
@Prop()
property_3: string;
@Prop({ required: true })
property_4: boolean;
}
export const DemoSchema = SchemaFactory.createForClass(Demo);
Bước 4: Đăng ký Lược đồ
Điều hướng đến thư mục của mô-đun của bạn và thêm các mục nhập sau:
import { MongooseModule } from '@nestjs/mongoose';
import { Demo, DemoSchema } from '../schemas/demo.schema';
Tiếp theo, tạo một “hàng nhập khẩu”Mảng bên trong @module người trang trí. Sau đó, bên trong mảng, hãy gọi forFeature phương pháp trên MongooseModule.
Các forFeature phương thức này nhận một mảng các mô hình Mongoose. Chuyển vào một đối tượng cấu hình với Tên thuộc tính được đặt thành tên của lớp lược đồ của bạn và lược đồ thuộc tính được đặt thành giản đồ đã tạo của bạn:
MongooseModule.forFeature([{ name: Demo.name, schema: DemoSchema }]),
Bước 5: Tiêm mô hình Mongoose
Tiếp theo, bạn sẽ cần phải đưa vào Mô hình Mongoose để cho phép truy vấn cơ sở dữ liệu của bạn bằng cách gọi các phương thức Mongoose trên mô hình.
Điều hướng đến lớp dịch vụ của mô-đun của bạn và thêm các lần nhập sau:
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { Demo, DemoDocument } from '../schemas/demo.schema';
Sử dụng Người mẫu giao diện như một định nghĩa kiểu cho mô hình của bạn, cấp cho nó quyền truy cập vào các phương thức Mongoose.
Các InjectModel decorator đưa mô hình Mongoose vào phương thức khởi tạo của lớp dịch vụ của bạn.
Tiếp theo, tạo một người xây dựng bên trong lớp dịch vụ của bạn. Nó sẽ mất một riêng biến như một đối số, một Người mẫu với một loại chung chung là DemoDocument. Chú thích biến private của bạn với InjectModel decorator và chuyển tên lớp lược đồ của bạn làm đối số:
@Injectable()
export class DemoService {
constructor(
@InjectModel(Demo.name)
private demoModel: Model<DemoDocument>,
) {}
}
Bạn có thể truy vấn cơ sở dữ liệu MongoDB của mình bằng cách gọi các phương thức Mongoose trên biến private của bạn (demoModel).
Ưu điểm của việc sử dụng MongoDB
Bên cạnh cộng đồng trực tuyến mạnh mẽ và tính dễ sử dụng, MongoDB cung cấp tính ổn định và sẵn có của dữ liệu cao. Nó cung cấp phân tích nhanh, tổng hợp dữ liệu và hơn thế nữa, làm cho nó trở thành cơ sở dữ liệu lý tưởng cho các dự án của bạn.