我正在按照这篇文章的指南,使用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 { }
以下是将新宠物添加到用户的 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.
在使用上面链接中概述的mongoose模型处理子文档时,这是正确的方法吗?
addNewPet = (userId: string, newPet: IPet) => { var _user = mongoose.model("User", userSchema);
let userModel: IUserModel = await this._user.findById(userId);
userModel.pets.push(newPet);
await userModel.save();
}
希望对你有所帮助。 - dnp1204