如何使用打字稿定义猫鼬模式参考字段?

Posted

技术标签:

【中文标题】如何使用打字稿定义猫鼬模式参考字段?【英文标题】:How to define mongoose schema ref fields with typescript? 【发布时间】:2022-01-08 18:37:22 【问题描述】:

我使用以下代码进行架构定义:

import  Prop, Schema  from '@nestjs/mongoose';
import  Types  from 'mongoose';

@Schema( collection: 'templates' )
export class Template 
    @Prop(
        type: SchemaTypes.ObjectId,
        ref: User.id,
        required: true,
    )
    public user: Types.ObjectId;

    // other fields...

我希望在填充模板实体时有用户字段(用户:用户 => 用户名),但我有类型限制:

“ObjectId”类型上不存在属性“名称”

【问题讨论】:

【参考方案1】:

在 typescript (nest-js) 中,我使用 virtuals 来代替:

Schema.virtual('YOUR_VIRTUAL_NAME', 
  ref: 'User',
  localField: 'userOnlyReservableId',
  foreignField: '_id',
  justOne: true,
);

记得添加架构:

@Schema( toJSON:  virtuals: true , toObject:  virtuals: true  )

在 find 之后最后填充虚拟:

model.find().populate('YOUR_VIRTUAL_NAME')

【讨论】:

以上是关于如何使用打字稿定义猫鼬模式参考字段?的主要内容,如果未能解决你的问题,请参考以下文章

无法将猫鼬虚拟与打字稿一起使用

打字稿 - 在箭头(回调)函数中使用它 - 猫鼬

使用猫鼬和打字稿创建模式

使用猫鼬和打字稿创建模式

使用打字稿创建猫鼬模型 - 子文档

如何在打字稿中的猫鼬userschema.methods中使用“this”