Я создаю проект с Node и MongoDB. База данных содержит несколько коллекций и документов. Таблица Project содержит несколько записей, и существует множество программ. У каждой программы есть много спикеров. Когда я использовал следующий код, он отображает только динамики одной программы
Пробный код
function getOne(req,res,next)
{
try
{
var aggregate = Project.aggregate();
aggregate.match({"_id":ObjectId(id)})
.lookup({ from: "programmes", localField: "_id", foreignField: "Project_id",as: "programme_doc"})
.unwind("$programme_doc")
.lookup({ from: "gust_speakers", localField: "programme_doc._id", foreignField: "programme_id",as: "programme_doc.speakers"})
.lookup({ from: "status", localField: "Project_status_id", foreignField: "_id",as: "status_doc"})
.lookup({ from: "guests", localField: "_id", foreignField: "Project_id",as: "guest_doc"})
.lookup({ from: "second_manager", localField: "_id", foreignField: "Project_id",as: "team_doc"})
.lookup({ from: "users", localField: "team_doc.user_id", foreignField: "_id",as: "team_docc"})
.lookup({ from: "type", localField: "Project_category_id", foreignField: "_id",as: "category_doc"})
.lookup({from: "feedbacks", localField: "_id", foreignField: "Project_id",as: "feedbacks"})
.lookup({from: "feedbacks", localField: "_id", foreignField: "programme_doc._id",as: "pro_feedbacks"})
.lookup({from: "links", localField: "_id", foreignField: "Project_id",as: "link_doc"
Project.aggregatePaginate(aggregate, options, function(err, results, pageCount, count)
{
Status.find({}).select("_id name color").exec(function(err, statusResult) {
if (!err) {
ProjectStatus.find({}).select("_id name dp").exec(function(err, eveResult) {
if (!err) {
return res.status(200).json({data:results[0],pro_status:statusResult,pro_status:proResult});
}
});
}
});
})
}
catch (err)
{
return res.status(500).json(err);
}
}
Пример вывода
{
"data": {
},
"programme_doc": {
// program details
,
"speakers": [
{
//speaker 1
},
{
//speaker 2
}
]
},
}
Но если я прокомментирую строку unwind
и следующую lookup
следующим образом, она покажет все детали программы без сведений о динамике.
aggregate.match({"_id":ObjectId(id)})
.lookup({ from: "programmes", localField: "_id", foreignField: "Project_id",as: "programme_doc"})
//.unwind("$programme_doc")
//.lookup({ from: "gust_speakers", localField: "programme_doc._id", foreignField: "programme_id",as: "programme_doc.speakers"})
.lookup({ from: "status", localField: "Project_status_id", foreignField: "_id",as: "status_doc"})
//rest of codes
output
{
"data": {
},
"programme_doc": [
{
// program details
},
{
// program details
},
{
// program details
},
{
// program details
},
]
}