gpt4 book ai didi

mongodb - NestJS with mongoose schema, interface and dto approach 问题

转载 作者:行者123 更新时间:2023-12-05 02:55:20 29 4
gpt4 key购买 nike

我是 nestJS 和 mongoDB 的新手,我不清楚为什么我们需要为要保存在 mongoDB 中的每个集合声明 DTO、模式和接口(interface)。 IE。我有一个集合(不幸的是我将它命名为 collection 但没关系)这是我的 DTO:

export class CollectionDto {
readonly description: string;
readonly name: string;
readonly expiration: Date;
}

界面:

import { Document } from 'mongoose';

export interface Collection extends Document {
readonly description: string;
readonly name: string;
readonly expiration: Date;
}

和架构:

import * as mongoose from 'mongoose';

export const CollectionSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
description: {
type: String,
required: false,
},
expiration: {
type: String,
required: true,
}
});

我的疑问是,我们真的需要三个内容几乎相同的对象吗?乍一看很奇怪。

最佳答案

我在纯 nodejs 基础上大量使用 mongoose,并且我也开始使用 NestJS。 Mongoose 定义了两个东西,以便您可以使用 mongodb 来创建、查询、更新和删除文档:Schema 和 Model。你已经有了你的模式,对于普通 Mongoose 的模型应该是:

import * as mongoose from 'mongoose';

export const CollectionSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
description: {
type: String,
required: false,
},
expiration: {
type: String,
required: true,
}
});
const Collection = mongoose.model('collections', CollectionSchema);

这里的集合将是 Mongoose 模型。到目前为止一切顺利。

在 NestJs 中,如果您要遵循 API 最佳实践,您将使用 DTO(数据传输对象)。文档中的 NestJs 提到使用类比使用接口(interface)更可取,因此您在这里不需要接口(interface)。当你定义 Mongoose schema 时,你也可以定义 Model/Schema:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type CollectionDocument = Collection & Document;

@Schema()
export class Collection {
@Prop()
name: string;

@Prop()
description: number;

@Prop()
expiration: string;
}

export const CollectionSchema = SchemaFactory.createForClass(Collection);

对于您的服务和 Controller ,您同时使用(模型和 DTO):

import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Collection, CollectionDocument } from './schemas/collection.schema';
import { CollectionDto } from './dto/collection.dto';

@Injectable()
export class CollectionService {
constructor(@InjectModel(Collection.name) private collectionModel: Model<CollectionDocument>) {}

async create(createColDto: CollectionDto): Promise<Collection> {
const createdCollection = new this.collectionModel(createColDto);
return createdCollection.save();
}

async findAll(): Promise<Collection[]> {
return this.collectionModel.find().exec();
}
}

在此之后,您可以使用 Swagger 自动生成 API 文档。 NestJS Mongo Techniques

关于mongodb - NestJS with mongoose schema, interface and dto approach 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61334475/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com