使用 typescript 创建猫鼬模型 - 子文档

2023-11-24

我正在使用打字稿实现猫鼬模型,如本文所述: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.

如上面链接的文章中所述,使用猫鼬模型时,这是处理子文档的正确方法吗?


你可以试试这个包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);

usage

let u2 = new User2Model({ child: { name: 'u1' } }); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 typescript 创建猫鼬模型 - 子文档 的相关文章

随机推荐

  • 如何从discord.py 中的文本通道获取所有消息的数组?

    我有频道对象 并且我已经尝试过 mess channel history limit 200 but mess is a HistoryIterator对象并且其内不包含任何消息mess messages对象 大小 0 频道中有消息 所以不
  • 如何获取BitBucket分支url?

    我有一个 bitbucket 存储库 我知道我可以单击 操作 选项卡 然后单击 克隆 以获取存储库的 http url 现在 我在存储库中有多个分支 并且我计划使用 Jenkins CI 从特定分支进行构建 有没有办法获取我的存储库中特定分
  • 如何将 powerpivot 数据作为表格复制到 Excel 工作簿中?

    我在 powerpivot 中有已修改的数据 我想将其作为常规表 而不是数据透视表 放入工作簿中 我需要这个 以便我可以使用该表来运行同一工作簿中另一个工作表中的一些 vlookups 我找到了这个答案 link我将尝试进行总结 而不会进行
  • JQuery 数据表行高

    我有一个页面 人们可以输入名字 姓氏 电话 电子邮件和种族 然后单击 添加 它会在数据表中添加一个条目 问题是点击添加后表格显示如下 如何调整每行的高度以使其正确显示 这是我的表的 html 代码 div div
  • 如何更改 JSF 2.0 中的语言环境?

    在我的应用程序中 用户应该能够切换区域设置 用于在页面上呈现文本的语言 大量教程都在使用 FacesContext getCurrentInstance getViewRoot setLocale 例如 http www mkyong co
  • Ionic 启动器无法在 crosswalk-lite 上运行:无法启动活动 ComponentInfo

    我正在使用 crosswalk lite 启动 ionic 应用程序 但它无法在真实设备和 genymotion 上运行 ionic start myApp tabs npm install bower install ionic serv
  • 查找小于其右侧某个元素的每个元素

    我需要找到一个向量中小于其后的多个元素之一的元素 在循环中很容易做到 x some vector values for m 1 length x if any x m 1 end gt x m do such and such end en
  • 为什么我的 HTTP Origin 标头与 request.base_url 不匹配以及如何修复?

    你好 这是我在这里的第一篇文章 我已经尝试调试这个问题几天了 但无法弄清楚 当我向 Rails api 发出发布请求时 我收到了以前从未见过的错误 Started POST owners for 1 at 2021 01 12 11 24
  • 图像旋转中的背景透明度()

    自过去 2 天以来 我尝试使用 imagerotate PHP GD 函数旋转图像后为背景添加透明度 但是 令我非常失望的是 它根本不起作用 它只是在其背后提供黑色背景 这是我的代码 patchImageS image png the im
  • 如何为所有屏幕的 iPhone 应用程序添加垂直滑动手势?

    我想向我的应用程序添加一个手势 以便当用户垂直滑动时它会触发一个方法来执行某些操作 滑动可以向上或向下 我从来没有用手势做过任何事情 所以这是我第一次使用手势 而不是 UITableView 中包含的用于删除行的手势 另一个问题是我的大多数
  • 使用 R 查找字符串中的重复模式

    我有一个很大的文本 其中包含以下表达式 aaaahahahahaha that was a good joke 处理后 我想要 aaaaahahahaha 消失 或者至少将其更改为简单 ha 目前 我正在使用这个 gsub 1 str 当带
  • JQuery:如何找出一个元素有多少个子元素?

    如何使用 jQuery 找出一个元素有多少个子元素 假设我有以下结构 div div div div div div div div div div div div div div 我想知道 div 元素 container 有多少个子元素
  • 在 python 解释器提示符中添加颜色,无法正确换行

    我希望在终端中有一个更丰富多彩的 Python 提示符 只是为了便于阅读 我目前有 sys ps1 033 96m gt gt gt 033 0m sys ps2 033 96m 033 0m in my PYTHONSTARTUP文件 它
  • 使用“void_t”检查类是否具有具有特定签名的方法

    此刻 我是使用此方法检查类是否具有具有特定签名的方法 参加后Walter E Brown 的元编程 CppCon2014 演讲 我开始想知道是否void t可以在这种特殊情况下使用 以使代码更清晰 更具可读性 但是我很难思考void t 到
  • Angular 2 中路线更改时的结束间隔

    我在路由器插座内的 Angular 2 组件中启动一个计时器 setInterval gt 10000 当我离开嵌入组件的路线时 计时器不会退出 我怎样才能做到这一点 您可以从此挂钩中清除间隔 我的是从组件 视图控制的 export cla
  • 如何检查c中是否有被零除的情况

    include
  • ggplot2 条形图上的舍入百分比标签

    q1 lt qplot factor Q1 data survey geom histogram fill factor Q1 ylim c 0 300 options digits 2 q1 geom bar colour black s
  • 如何使用线程执行单元测试? [复制]

    这个问题在这里已经有答案了 执行摘要 当线程中抛出断言错误时 单元测试不会终止 这是有道理的 因为不应该允许一个线程使另一个线程崩溃 问题是我该如何 1 在第一个辅助线程崩溃时使整个测试失败 或者 2 循环并在每个线程全部完成后确定它们的状
  • 如何通过Fiddler捕获Visual Studio Code流量?

    如何通过Fiddler抓取VS Code流量 我运行了我的 Fiddler 看起来工作正常 它可以捕获浏览器的流量 但不能捕获 VS Code 的流量 如果有人能给我解决方案 我真的很感激 Thanks 假设您正在使用一些 REST 客户端
  • 使用 typescript 创建猫鼬模型 - 子文档

    我正在使用打字稿实现猫鼬模型 如本文所述 https github com Appsilon styleguide wiki mongoose typescript models并且不确定当您使用子文档数组时这会如何翻译 假设我有以下模型和