我正在使用 Mongo(使用 Mongo 本机驱动程序)、Node 和 Express 编写应用程序。
我在 mongo 中有学生、课程和教授的文件。
我想检索学生当前正在学习或过去学习过的所有“教授”文件的列表。
Students: {courseid, ....}
Course: {professors, ....}
Professors: {....}
这就是我打算做的:
- 我首先发出一个查询来检索学生的所有课程 ID。
- 然后我必须编写并发出另一个查询来获取所有这些课程的教授 ID。
- 最后,我必须获取与教授 ID 相关的所有“教授”文件。
第 1 步没问题,现在我有了所有课程 ID。但我不确定如何执行第 2 步。第二步和第三步类似,一旦我弄清楚第二步,第三步就很容易了。
基本上我想在第 2 步中发出一个查询来检索所有教授 ID。我不想针对 10 个课程 ID 发出 10 个单独的查询。
这是我所拥有的:
function getProfsByStudent(req, res, next)
{
db.collection('students', function(err, stuColl)
{
stuId = new ObjectID.createFromHexString(req.params.stuId);
stuColl.find({_id : userId}, { 'current_course_id' : 1 , 'past_courses.course_id' : 1 , _id : 0 })
{
db.collection('courses', function(err, courseColl)
{
courseColl.find({$or : []}) // THIS IS WHERE I AM STUCK
});
res.send(posts);
});
});
}
更新
根据答案更新问题。
所以,这是我在stuColl.find
通话后得到的 JSON:
[{"current_course_id":"4f7fa4c37c06191111000005","past_courses":[{"course_id":"4f7fa4c37c06191111000003"},{"course_id":"4f7fa4c37c06191111000002"}]}]
现在我想用上面的方法做另一个 find 来获取所有的教授 ID。但我得到的只是一个空结果。我认为我非常接近。我究竟做错了什么?
stuColl.find({_id : userId}, { 'current_course_id' : 1 , 'past_courses.course_id' : 1 , _id : 0 }).toArray(function(err, courseIdsArray)
{
db.collection('courses', function(err, courseColl)
{
courseColl.find({$or : [ {_id : 'courseIdsArray.current_courses_id' }, {_id : {$in : courseIdsArray.past_courses}} ]}, {'professor_ids' : 1}).toArray(function(err, professorIdsArray)
{
res.send(professorIdsArray);
});
});
});