Typegoose / Mongoose 将自定义类型映射到 db
Posted
技术标签:
【中文标题】Typegoose / Mongoose 将自定义类型映射到 db【英文标题】:Typegoose / Mongoose map custom type to 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
属性的每个地方。
这可能吗?我该怎么做?
谢谢
【问题讨论】:
【参考方案1】:最简单的方法是使用 get
和 set
选项将属性从 / 转换为 Timecode
并将其作为字符串保存在数据库中,但是使用多个属性可能会变得乏味且难以调试.
Mongoose 还支持Custom Schema Types,Typegoose 要求这些类型有一些属性(默认情况下应该有),列在Custom Types 中。
一个小例子可以在typegoose's tests找到。
【讨论】:
以上是关于Typegoose / Mongoose 将自定义类型映射到 db的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose / typegoose 根据开始和结束索引获取数组
如何提取 typescript mongoose/typegoose 模式
使用多个装饰器将 Type-GraphQL 与 Typegoose 相结合
Typescript typegoose getModelForClass 返回类型