mongodb - 使用 Schema First 方法和 NestJS 在 Mongoose 中填充查询
问题描述
首先,我想说这个问题与引用这个问题的问题类似。我有与第二个链接完全相同的问题,除了一个显着的区别。我正在尝试扩展由 NestJS 生成的定义属性的类。
我将 NestJs 与此处找到的 Schema first 方法一起使用。我还在基于我的 GraphQL Schema 生成一个类文件。
这是架构:
type Location {
name: String!
owner: User!
}
生成类:
export class Location {
name: string;
owner: User;
}
现在,我想扩展这个类,这样我就不必重复数据(还有很多字段没有显示)。我还想添加存在于文档中但不在架构中的字段(_id
在本例中)。这是我的 LocationDocument 和我的架构。
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
}
export const LocationSchema: Schema = new Schema(
{
name: {
type: String,
required: true,
},
owner: {
type: Types.ObjectId,
ref: 'User',
}
);
现在这是我的问题。Location
从 GraphQL 模式生成的类将owner
属性定义为一种User
类型。但实际上它只是一个 mongodb id,直到它被 Mongoose 填充。所以它可能是 aTypes.ObjectId
或 a User
on a UserDocument
。所以我试图将其定义为:
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
owner: User | Types.ObjectId;
}
但这会在编译器中引发一个错误,即 LocationDocument 错误地扩展了 Location。这是有道理的。有没有办法扩展用户类,但说所有者属性可以是用户类型(曾经由猫鼬填充)或 mongo 对象 ID(存储在数据库中)。
解决方案
我决定拥有一个可以同时是两种类型的属性,虽然使用 Mongoose 和 JS 很容易,但不是类型化的方式。在我的架构中,我有一个用户类型的所有者。在我的数据库和扩展它的文档中,我有一个 OwnerId。所以对于访问 API 的人来说,他们并不关心关系的 ownerId。但在我的解析器中,我使用了 ID。一种是 Mongo ID 类型,另一种是 User 类型。
推荐阅读
- angular - 用户单击“添加记录”按钮时如何添加记录
- javascript - 类型错误:使用 ftp-deploy 时无法读取未定义的属性“减少”
- java - PDFBox PDFMergerUtility 在 JavaFX 应用程序上不稳定
- sql - SQL:使用连接选择右表中的记录计数
- c# - 使用 OWIN 托管 Swagger UI 3.0 Dist 文件夹
- firebase - Firebase 网址格式
- python - Dialogflow v2 错误“必须设置 MalformedResponse 'final_response'”
- css - 如何使用媒体查询增加图像的大小
- visual-studio-code - 如何列出具有特定扩展名的所有文件
- reactjs - 可以有dataloader和rest api缓存吗?