我是Nestjs的新手。我现在正在玩一个非常简单的mongodb / mongoose db,其中包含书籍,作者和类型。我开始对我实际需要的模型(例如书籍)有了模糊的印象。
目前我有2种型号:
export interface Book extends Document {
id?: string;
name: string;
year?: string;
authorId: string;
genreId: string;
}
@InjectModel('Book') private readonly bookModel: Model<Book>
并调用book.save()
export class CreateBookDto {
@IsString()
@IsNotEmpty()
readonly name: string;
@IsOptional()
@IsNumberString()
@Min(1000)
@Max(3000)
readonly year: string;
@IsMongoId()
readonly authorId: string;
@IsMongoId()
readonly genreId: string;
}
(当然,还有另一个文件中的猫鼬模式)
现在,我遇到了一个问题,试图序列化书本答复,我开始认为我可能还需要另一个模型-Book
类,这将允许我重命名属性,排除,公开等。 。该类基本上可以替换接口,除了
export class Book extends mongoose.Document
似乎没有用。
现在,闻起来好像是我对设计有误解-我不敢相信必须在代码库中维护3个模型。
有人可以向我介绍一下吗?-我可以只讲一个单一的课程吗?,它可以满足所有目的:提供类型,验证和序列化。如果是这样,如何使.save()
部分起作用?
答案 0 :(得分:0)
首先,您对MongoDB的体系结构有一些误解,当您从Mongo的商店获取注册表时,文档是数据库中的注册不是模型。
Mongoose是ODM,这意味着它是管理数据持久性的一层,而您无需直接与数据库进行通信,还为您提供了一个API,供您在运行时使用数据。它使用基于架构的架构,这就是您在创建文档而不是架构时做错的部分。
第二个DTO是一个非常好的实践,它使控制器和ODM(猫鼬)之间的关系松耦合(这有助于系统的增长)。
另外,为了实现您想要的目标,您必须创建一个Book Schema来保留所有信息。也许您可以看到NestJS' documentation example
答案 1 :(得分:0)
开始使用Nest.js时我遇到了同样的问题...
在这里,我发现这篇重要文章是“如何使用Nest.js,MongoDB和Vue.js构建博客” https://morioh.com/p/74ffc8a798bb,但对于如何为猫鼬添加Nest.js Serialization仍无明确答案。
然后我想到了这篇文章https://medium.com/@contactsunny/hide-properties-of-mongoose-objects-in-node-js-json-responses-a5437a5dbec2,该文章至少阐明了一些问题,并显示了使用'UserSchema.methods.toJSON'的可能方向