typegoose 方法集合

1,800 阅读2分钟

本文是学习typegoose方法的英文文档,顺便翻译记录下来,方便以后查阅

文档地址是:typegoose.github.io/typegoose/d…

typegoose 的方法

getModelForClass

getModelForClass(class, overwriteOptions)通过传入一个class会得到一个model,如果Mongoose model里面不存在,会自动创建一个

示例:

class Kitten { @prop() public name?: string; }

const KittenModel = getModelForClass(Kitten);

getClassForDocument

getClassForDocument(doc: DocumentType) 获取model创建的class

注意: 这只会在class/model 在typegoose 上创建的

示例:

class Kitten { @prop() public name?: string; }

const model = getModelForClass(Kitten);

const doc = new model();

getClassForDocument(doc) === Kitten; // should be "true"

getClass

getClass(input: any) 从不同的方式获取class

getClass(input: mongoose.Document): 像getClassForDocument 一样获取class

getClass(input: mongoose.Schema.Types.Embedded: 获取class从嵌套文档

getClass(input: string): 通过名字获取class

getClass(input: { typegooseName: string }): 通过使用某个具有String类型的键TypegooseName的对象来获取类

buildSchema

buildSchema(class)从class获取schema 在model生成之前修改schema

class Kitten { @prop() public name?: string; }

const kittenSchema = buildSchema(Kitten);

getDiscriminatorModelForClass

getDiscriminatorModelForClass(from: mongoose.model, class, discriminator?: string) 给一个model添加一个鉴别器。

from: 作用于这个model上面

class: 这个class是用作新的model

discriminator(可选): 设置自定义的鉴别器ID(默认是class name)

class Event { @prop({ required: true }) public name!: string; }

class ClickEvent extends Event { @prop({ required: true, default: 0 }) public timesClicked!: number; }

const EventModel = getModelForClass(Event); const ClickEventModel = getDiscriminatorModelForClass(EventModel, ClickEvent);

addModelToTypegoose

addModelToTypegoose(model: mongoose.model, class) 是用来获取一个模型的typeScript 的类型信息并且允许getClassForDocument生效。这个函数主要是在buildSchema 之后在typegoose修改model且仍然能够冲typegoose class里面获取类型信息

class Kitten { @prop() public name?: string; }

const kittenSchema = buildSchema(Kitten); const KittenModel = addModelToTypegoose(mongoose.model('Kitten', kittenSchema), Kitten); // "KittenModel" is now a valid Typegoose model

buildSchema

deleteModel

deleteModel(name: string) 从typegoose 缓存删除model 并调用

mongoose.connection.deleteModel

class SomeUser {}

const SomeUserModel = getModelForClass(SomeUser); deleteModel('SomeUser');

deleteModelWithClass

deleteModelWithClass(cl: NewableFunction) 查找model的命名并调用deleteModel

class SomeUser {}

const SomeUserModel = getModelForClass(SomeUser); deleteModelWithClass(SomeUser);

setGlobalOptions

setGlobalOptions(options) 是用来设置全局的选项的

示例:

setGlobalOptions({ options: { allowMixed: Severity.ALLOW } });

getModelWithString

getModelWithString(key)会通过给定的key值检测model,如果mongoose model不存在于TypeGoose's 缓存里,则返回undefined

class Kitten { @prop() public name?: string; }

const KittenModel = getModelForClass(Kitten);

const KittenModelNew = getModelWithString(KittenModel.modelName); // OR with the internal utils.getName(class) const KittenModelNew = getModelWithString(utils.getName(Kitten)); // BUT when you have the class at your disposal, you should use "getModelForClass" - it will return the already compiled model

getName

getName(class) 获取返回model的命名(取决于customName 或 automaticName)

class Kitten {} getName(Kitten); // "Kitten"

@modelOptions({ options: { customName: 'SomeRandomKitten' } }) class Kitten2 {} getName(Kitten); // "SomeRandomKitten"

@modelOptions({ schemaOptions: { collection: 'RandomKittens' }, options: { automaticName: true } }) class Kitten3 {} getName(Kitten); // "Kitten3_RandomKittens"