本文是学习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"