【发布时间】:2021-07-22 07:11:36
【问题描述】:
我的 MongoDB 数据库已动态创建集合。我想使用格式如下的快速路由访问特定集合:rootUrl/projects/[projectId]/stages/
我尝试过的(不起作用): 动态创建模式模型的函数:
function dynamicStageModel(projectId) {
stageSchema = new mongoose.Schema({ ... });
return mongoose.model(projectId, stageSchema, projectId);
}
并在快速路由中调用该函数:
router.get("/:projectId/stages", (req, res) => {
const Stage = dynamicStageModel(req.params.projectId);
Stage.find({}, (err, result) => {
console.log("result: " + result);
})
.then((result) => {
res.status(200).send(result);
})
.catch((err) => {
res.status(500).send(err);
});
});
这仅适用于特定集合的第一个查询,但同一集合(相同 projectId)的后续查询会引发错误,因为我的模型函数正在使用相同的参数调用 mongoose.Model。错误:OverwriteModelError: Cannot overwrite `project3` model once compiled.
我考虑过遍历所有集合并为每个集合创建路由,但是如果有数千个集合,这会变得非常庞大。
【问题讨论】: