使用@nestjs/mongoose 时如何在文档界面中定义静态猫鼬方法?

Posted

技术标签:

【中文标题】使用@nestjs/mongoose 时如何在文档界面中定义静态猫鼬方法?【英文标题】:How to define static mongoose methods in document interface while using @nestjs/mongoose? 【发布时间】:2019-02-09 14:31:12 【问题描述】:

Mongoose 架构类 Mongoose 集合用户架构

const UserSchema = new Schema(
  firstName: 
    type: String,
    required: true,
  ,
  lastName: 
    type: String,
    required: true,
  ,
  gender: 
    type: String,
    enum: Object.keys(GenderType),
    required: true,
  ,
);

UserSchema.methods = 

  fullName(): string 
    return `$this.firstName $this.lastName`;
  ,

;

UserSchema.statics = 

  someAction(): string 
    return '123';
  ,

;

export default UserSchema;

文档接口类

Mongoose 集合接口类

export interface IUser extends Document 

  _id: Types.ObjectId;
  firstName: string;
  lastName: string;
  gender: string;

  fullName: () => string;

使用@nestjs/mongoose时如何在文档界面中定义静态mongoose方法?

【问题讨论】:

【参考方案1】:

除了IUser,您可能还希望有一个额外的接口IUserModel 并从Model<T> 扩展它。示例 sn-p 可能如下所示:

export interface IUserModel extends Model<IUser> 
     // Model is imported from mongoose
     // you can put your statics methods here
     someAction: () => string;

然后在使用@InjectModel() 注入模型的任何地方,您都可以键入IUserModel 类型的注入。

constructor(@InjectModel('UserModel') private readonly userModel: IUserModel) 

现在您的this.userModel 将可以访问someAction() 方法。

编码愉快!

【讨论】:

以上是关于使用@nestjs/mongoose 时如何在文档界面中定义静态猫鼬方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 @nestjs/mongoose 中设置 mongoose 全局选项

@nestjs/mongoose 的文档

NestJs/Mongoose 中的自动增量序列

nestjs mongoose .insertMany 不是函数

如何使用来自@nestjs/mongoose 的@Prop 装饰器添加嵌套的对象数组

创建父文档时未初始化子文档。 Nestjs/猫鼬