Mongo(Mongoネイティブドライバーを使用)、Node、Expressを使用してアプリケーションを作成しています。
私はmongoに学生、コース、教授のドキュメントを持っています。
学生が現在受講している、または過去に受講したコースを持つすべての「教授」ドキュメントのリストを取得したいと思います。
Students: {courseid, ....}
Course: {professors, ....}
Professors: {....}
これは私がやろうとしていることです:
- 最初にクエリを発行して、学生のすべてのコースIDを取得します。
- 次に、これらすべてのコースの教授IDを取得するために、別のクエリを作成して発行する必要があります。
- そして最後に、教授IDに関連付けられているすべての「教授」ドキュメントを取得する必要があります。
ステップ1は問題ではなく、すべてのコースIDがあります。しかし、step2の実行方法がわかりません。ステップ2と3は似ていますが、ステップ2を理解すれば、ステップ3は簡単になります。
基本的に、step2で1つのクエリを発行して、すべての教授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"}]}]
次に、上記を使用して、すべての教授IDを取得するための別の検索を実行します。しかし、私が得るのはnullの結果だけです。私はとても近いと思います。私は何が間違っているのですか?
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);
});
});
});