使用 Typescript 从 Mongoose 模型访问文档属性

Posted

技术标签:

【中文标题】使用 Typescript 从 Mongoose 模型访问文档属性【英文标题】:Access document properties from a Mongoose Model using Typescript 【发布时间】:2020-01-18 11:46:56 【问题描述】:

我将 Mongoose 与 Typescript 一起使用,并希望从模型中访问属性。鉴于此示例 UserModel

import mongoose,  Schema  from 'mongoose';

const userSchema: Schema = new mongoose.Schema(
    _id: mongoose.Schema.Types.ObjectId,
    username: 
        type: String,
        required: true,
        unique: true,
    ,
);

export const UserModel = mongoose.model('User', userSchema);

我想在获取用户后访问用户名

const user: Document | null = await UserModel.findById(id);
const username: string = (user as Document).username;

但由于Document 是一个接口,我无法从UserModel 访问该属性。如何访问它?

【问题讨论】:

【参考方案1】:

我建议您为您的User 创建一个界面,如下所示:

export interface IUserDocument extends mongoose.Document 
    username: string;

之后,您可以使用以下内容定义您的模型:

export const UserModel = mongoose.model<IUserDocument>('User', userSchema);

如果您随后获得IUserDocument,您可以轻松访问找到的文档上的用户名属性,如下所示:

const user: IUserDocument | null = await UserModel.findById(id);
const username: string = user.username;

【讨论】:

以上是关于使用 Typescript 从 Mongoose 模型访问文档属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 在 Mongoose 中缺少子文档方法

Typescript & Mongoose - "this" 在实例方法中不可用

使用`let cached = global.mongoose`时出现Next.js + Typescript + mongoose错误

typescript 使用TypeScript和MongoDb的Mongoose示例

typescript 使用TypeScript和MongoDb的Mongoose示例

typescript 使用TypeScript和MongoDb的Mongoose示例