使用打字稿创建猫鼬模型 - 子文档
Posted
技术标签:
【中文标题】使用打字稿创建猫鼬模型 - 子文档【英文标题】:Creating mongoose models with typescript - subdocuments 【发布时间】:2018-08-20 01:08:30 【问题描述】:我正在使用 typescript 实现 mongoose 模型,如本文所述:https://github.com/Appsilon/styleguide/wiki/mongoose-typescript-models 并且不确定当您使用子文档数组时如何转换。假设我有以下模型和架构定义:
interface IPet
name: type: mongoose.Types.String, required: true,
type: type: mongoose.Types.String, required: true
export = IPet
interface IUser
email: string;
password: string;
displayName: string;
pets: mongoose.Types.DocumentArray<IPetModel>
;
export = IUser;
import mongoose = require("mongoose");
import IUser = require("../../shared/Users/IUser");
interface IUserModel extends IUser, mongoose.Document
import mongoose = require("mongoose");
import IPet = require("../../shared/Pets/IPet");
interface IPetModel extends IPet, Subdocument
将新宠物添加到 user.pet 子文档的代码:
addNewPet = (userId: string, newPet: IPet)
var _user = mongoose.model<IUserModel>("User", userSchema);
let userModel: IUserModel = await this._user.findById(userId);
let pet: IPetModel = userModel.pets.create(newPet);
let savedUser: IUser = await pet.save();
查看链接后,这似乎是处理子文档所需的理想方法。但是,这种情况似乎会导致抛出 CasterConstructor 异常:
TypeError: Cannot read property 'casterConstructor' of undefined at Array.create.
使用上面链接文章中概述的猫鼬模型时处理子文档的方法是否正确?
【问题讨论】:
我之前没有用打字稿创建猫鼬模型。我猜让宠物:IPetModel = userModel.pets.create(newPet);是不正确的。你可以试试这个解决方案吗? addNewPet = (userId: string, newPet: IPet) var _user = mongoose.model你可以试试这个包https://www.npmjs.com/package/mongoose-ts-ua
@setSchema()
class User1 extends User
@prop()
name?: string;
@setMethod
method1()
console.log('method1, user1');
@setSchema()
class User2 extends User
@prop( required: true )
name?: string;
@prop()
child: User1;
export const User2Model = getModelForClass<User2, typeof User2>(User2);
用法
let u2 = new User2Model( child: name: 'u1' );
【讨论】:
以上是关于使用打字稿创建猫鼬模型 - 子文档的主要内容,如果未能解决你的问题,请参考以下文章