【问题标题】:Typegoose / Mongoose map custom type to dbTypegoose / Mongoose 将自定义类型映射到 db
【发布时间】:2021-11-20 16:33:35
【问题描述】:

我的设置

  • 打字稿
  • 猫鼬
  • Typegoose

我有一个班级时间码

export class Timecode {
  constructor(private timestamp: string) {}

  getAsMilliseconds(): number {
    throw new Error('Not implemented');
  }

  add(timecode: Timecode): Timecode {
    throw new Error('Not implemented');
  }

  toString(): string {
    return this.timestamp;
  }
}

还有一个实体剪辑

import { prop } from '@typegoose/typegoose';
export class Clip extends BaseEntity {
  @prop({ required: true })
  name: string;

  @prop({ required: true })
  description: string;

  @prop({
    required: true,
    type: Timecode,
  })
  startTimecode: Timecode;
}

我的问题

只需保存时间戳即可将时间码轻松序列化为字符串,例如00:00:12:34

我希望能够在我的实体上拥有Timecode 属性,然后当我保存到 mongo 时让它们自动序列化为字符串。此外,它们应该在加载时转换回 Timecode 实例。

这是一个例子

const clip = new Clip();
clip.name = "My Clip"
clip.description = "My Dessciption"
clip.startTimecode = new Timecode("00:00:12:34")  
const savedClip = await ClipModel.create(clip)
const loadedClip = await ClipModel.findById(savedClip._id)
console.log(loadedClip.startTimecode.getAsMilliseconds()) //should work as startTimecode is an instance of Timecode

所以我希望猫鼬在我保存具有Typecode 类型属性的实体并将其转换为字符串然后在加载时将其反转为Typecode 的实例时注意到。

理想情况下,我可以在一个地方配置它,而不是在我声明Typecode 属性的每个地方。

这可能吗?我该怎么做?

谢谢

【问题讨论】:

    标签: node.js typescript mongodb mongoose typegoose


    【解决方案1】:

    最简单的方法是使用 getset 选项将属性从 / 转换为 Timecode 并将其作为字符串保存在数据库中,但是使用多个属性可能会变得乏味且难以调试.

    Mongoose 还支持Custom Schema Types,Typegoose 要求这些类型有一些属性(默认情况下应该有),列在Custom Types 中。

    一个小例子可以在typegoose's tests找到。

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      相关资源
      最近更新 更多