0

我的设置

  • 打字稿
  • 猫鼬
  • 类型鹅

我有一堂课时间码

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属性的每个地方。

这可能吗?我该怎么做?

谢谢

4

1 回答 1

0

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

Mongoose 还支持自定义模式类型,Typegoose 要求这些类型有一些属性(默认情况下应该有),列在自定义类型中。

在typegoose 的测试中可以找到一个小例子。

于 2021-10-02T09:58:59.317 回答