Мы решаем эту проблему, используя MongoDB Aggregate или используя цикл с async / await .Мне нравится, что вы предпочитаете использовать MongoDB в качестве предпочтительного и оптимального метода для этого.
Использование JavaScript:
app.get("/admin/phase/:level", async function (req, res) {
Level.findOne({ _id: req.params.level }, function (err, onelevel) {
Semster.find({ level: onelevel._id }, function (err, semsters) {
const modulePromise = semsters.map(semster => Module.find({ semster: semster._id }));
var modules = await Promise.all(modulePromise);
res.render("semster", { onelevels: onelevel, semsters: semsters, modules: modules })
})
})
});
Обновлено:
app.get("/admin/phase/:level", async function (req, res) {
try {
const onelevel = await Level.findOne({ _id: req.params.level });
const semsters = await Semster.find({ level: onelevel._id });
const modulePromise = semsters.map(semster => Module.find({ semster: semster._id }));
var modules = await Promise.all(modulePromise);
res.render("semster", { onelevels: onelevel, semsters: semsters, modules: modules })
} catch (err) {
//Your Error Handler
}
});
Использование агрегата Монго:
app.get("/admin/phase/:level", function (req, res) {
Level.findOne({ _id: req.params.level }, function (err, onelevel) {
Semster.aggregate([
{ $match: { level: onelevel._id } },
{ $lookup: { from: "module", localField: "_id", foreignField: "semster", as: "module" } }
], function (err, semsters) {
res.render("semster", { onelevels: onelevel, semsters: semsters})
})
})
});