gpt4 book ai didi

javascript - 如何基于作为参数传递的动态模式的 Mongoose 模型?

转载 作者:行者123 更新时间:2023-12-04 01:28:31 25 4
gpt4 key购买 nike

我是 mongoose 和 expressjs 的新手

我想根据文档和模型检索一个集合。我有多个继承通用架构的架构。

const extendSchema = (schema: mongoose.Schema<any>, definition: any): Schema<any> => {
return new mongoose.Schema({ ...schema.obj, ...definition, ...{ strict: false }});
};

const CommonSchema = new mongoose.Schema({ ... });

const OtherSchema = extendSchema(CommonSchema, { ... });

const OtherOtherSchema = extendSchema(CommonSchema, { ... });

然后,我想从 Mongoose 中取回集合

const getCollectionObject = (collection: string, schema: Schema) => {
return collection.model(collection, schema);
};


// get the first collection
export const getOtherCollection = async (name: string, id: string) => {
try {
const model = getCollectionObject(name, OtherSchema);
const document = await model.findById(mongoose.Types.ObjectId(id)).lean();
return document;
} catch (error) {
return error;
}
};


// get the second collection
export const getOtherOtherCollection = async (name: string, id: string) => {
try {
const model = getCollectionObject(name, OtherOtherSchema);
const document = await model.findById(mongoose.Types.ObjectId(id)).lean();
return document;
} catch (error) {
return error;
}
};

下面有一个错误 enter image description here

这可能吗?提前致谢!

PS:我已经看到其他帖子的解决方案是使属性成为可选的。

最佳答案

这解决了我的问题。

创建一个公共(public)模式加上另一个模式

const CommonSchema = new mongoose.Schema({ ... });
const OtherSchema = { ... };
const OtherOtherSchema = { ... };

然后,我声明了我的基础模型。

const Base = mongoose.model('collection-name', CommonSchema);

接下来,我使用鉴别器基于基本模型创建了我的其他模型

const OtherModel = Base.discriminator("Other", new mongoose.Schema(OtherSchema));
const OtherOtherModel = Base.discriminator("OtherOther", new mongoose.Schema(OtherOtherSchema));

您现在可以在任何作用域函数上使用该模型,如果需要,您可以将其导出。

Other.create({ ... });
Other.findById()

OtherOther.create();
OtherOther.findById();

请告诉我这种方法是否正确或者您还有什么建议

谢谢!

关于javascript - 如何基于作为参数传递的动态模式的 Mongoose 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com