从typegoose模型到mongoose模型的引用

时间:2018-08-15 08:33:42

标签: node.js mongoose

在旧项目中,我们正在迁移到typegoose。 现在有猫鼬模型和 我需要从typegoose到旧的mongoose模型进行引用。

猫鼬模型示例:

export interface User extends Mongoose.Document {
    FirstName: string;
    LastName: string;
}

const userSchema = new Mongoose.Schema({
    FirstName: String,
    LastName: String,
}, {strict: false, versionKey: false});

export default Mongoose.model<User>('users', userSchema);

现在,我创建了一个typegoose模型:

import UserModel, {User} from "./user";

export class Branch extends Typegoose {
    @prop({ref: UserModel})
    owner?: Ref<User>;
    @prop()
    name: string;
}
export const BranchModel = new Branch().getModelForClass(Branch);

我不知道如何获取分支用户。 我尝试填充BranchModel.find({}).populate({path: "user"})
但出现错误Schema hasn't been registered for model \"model\".\nUse mongoose.model(name, schema)","stack":"MissingSchemaError: Schema hasn't been registered for model \"model\".\nUse mongoose.model(name, schema)

1 个答案:

答案 0 :(得分:0)

也许我来晚了答复,但是我认为您的应用程序中有两个单独的猫鼬实例。我希望在您的旧应用程序中,您是在启动时显式创建一个Mongoose实例,而Typegoose使用自己的Mongoose实例,我认为它是由Typegoose隐式创建的。

在这种情况下,您必须在下面的第二个参数中将现有的猫鼬实例提供给getModelForClass方法

export const BranchModel = new Branch().getModelForClass(Branch, {existingMongoose: legacyMongooseInstance});

应该使用相同的猫鼬实例,并且Typegoose生成的架构可以“看到”“旧式”架构。请参阅Typegoose的文档。