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

最后发布: 2019-09-17 15:05:52


问题

我将Mongoose与Typescript一起使用,并希望从Model中访问属性。 给定此示例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访问该属性。 我该如何访问?

javascript node.js mongodb typescript mongoose
回答

我建议您像这样为User创建一个界面:

export interface IUserDocument extends mongoose.Document {
    username: string;
}

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

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

如果随后获得IUserDocument ,则可以像下面这样轻松地访问找到的文档上的username属性:

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